C ++-使用与结构相同的语法在结构周围构造包装器类

问题描述 投票:0回答:1

这是我之前的问题的后续内容:C++ - Constructing wrapper class with same syntax as wrapped data

[基本上,我正在尝试围绕一些数据制作包装器模板,并使用与数据相同的语法构造/设置包装器。

如果使用类似struct的东西,我可以通过转发参数来实现,因此语法可以是:

struct SomeStruct{

    int a, b, c;

    SomeStruct(int _a, int _b, int _c) {/*...*/}

};

// ...

WrapperClass<SomeStruct> wrapped_struct1{1,2,3};
WrapperClass<SomeStruct> wrapped_struct2 = {1,2,3};
WrapperClass<SomeStruct> wrapped_struct3( 1,2,3);

问题是,只有在结构中定义了该构造函数的情况下,此方法才有效。我无需定义就可以使它工作吗?

包装器当前看起来像这样:

template<typename T> class WrapperClass{
public:
    T data;    
    template <typename...Args>
    WrapperClass(Args&&...args) : data(std::forward<Args>(args)...) {}
};
c++ templates structure wrapper aggregate-initialization
1个回答
0
投票

您可以改为list initialization。对于aggregate type,将执行aggregate initialization

template <typename...Args>
WrapperClass(Args&&...args) : data{std::forward<Args>(args)...} {}
//                                ^                           ^
© www.soinside.com 2019 - 2024. All rights reserved.