代码之家  ›  专栏  ›  技术社区  ›  Newline

C++——构造结构相同语法结构的包装类

  •  1
  • Newline  · 技术社区  · 6 年前

    这是我上一个问题的后续: 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)...) {}
    };
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   songyuanyao    6 年前

    你可以换成 list initialization 相反。那么

    如果T是 aggregate type , aggregate initialization 执行。

    例如

    template <typename...Args>
    WrapperClass(Args&&...args) : data{std::forward<Args>(args)...} {}
    //                                ^                           ^
    
    推荐文章