C++ - 使用与结构相同的语法围绕结构构造包装器 class
C++ - Constructing wrapper class around structure with same syntax as structure
这是我之前问题的后续:
基本上,我试图围绕一些数据制作一个包装器模板,并使用与数据相同的语法构造/设置包装器。
如果我使用结构之类的东西,我可以通过转发参数来实现,所以语法可以是:
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)...) {}
};
您可以改为 list initialization。那么
If T is an aggregate type, aggregate initialization is performed.
例如
template <typename...Args>
WrapperClass(Args&&...args) : data{std::forward<Args>(args)...} {}
// ^ ^
这是我之前问题的后续:
基本上,我试图围绕一些数据制作一个包装器模板,并使用与数据相同的语法构造/设置包装器。
如果我使用结构之类的东西,我可以通过转发参数来实现,所以语法可以是:
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)...) {}
};
您可以改为 list initialization。那么
If T is an aggregate type, aggregate initialization is performed.
例如
template <typename...Args>
WrapperClass(Args&&...args) : data{std::forward<Args>(args)...} {}
// ^ ^