C++ - 使用与结构相同的语法围绕结构构建包装类

标签 c++ templates structure wrapper aggregate-initialization

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

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

如果我使用结构之类的东西,我可以通过转发参数来实现,所以语法可以是:

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)...} {}
//                                ^                           ^

关于C++ - 使用与结构相同的语法围绕结构构建包装类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58887912/

相关文章:

c++ - 使用 : 限制结构大小

c++ - 防止将 uint64_t 转换为 uint16_t

c++ - g++ 是否在函数模板重载方面表现不佳?

json - 在没有未知格式结构的情况下执行模板

c - 使用霍夫曼编码的文本数据压缩

matlab - 在 MATLAB 中的多个循环中从元胞数组中保存、提取相关数据

c++ - 如何使用自定义 STL vector 类避免智能指针 delete[] 异常?

c++ - boost.future 导致 clr 出现问题

templates - typescript :如何表达类型被限制为几种类型之一的通用函数

c - 从结构内的链接列表导出数据