gpt4 book ai didi

C++ - 使用与包装数据相同的语法构造包装类

转载 作者:行者123 更新时间:2023-12-01 14:49:40 25 4
gpt4 key购买 nike

我正在制作一个模板类,它是某种类型数据的包装器。我希望能够以与未包装时设置该数据相同的方式设置/构造此类。

这是基本思想:

template<typename T> class WrapperClass{

public:
T data;

WrapperClass(const T& _data) : data( _data) {}

// others stuff

};

现在有了像整数这样的东西,我可以这样做:
WrapperClass<int> wrapped_data = 1;

但是对于结构或类,我不知道如何:
struct SomeStruct{

int a, b, c;

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

};

//Would like to set the wrapped struct the same way as normal struct:
SomeStruct some_struct1 = { 1,2,3};
SomeStruct some_struct2( 1,2,3);

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

有没有办法以某种方式转发参数,以便我可以在没有错误的情况下执行后一种语法?

最佳答案

您的包装器的问题在于它需要一个已经构建好的 T .相反,您可以使用可变参数构造函数来接受构造 T 所需的参数。 :

#include <utility>

template<typename T> class WrapperClass{
public:
T data;
template <typename...Args>
WrapperClass(Args&&...args) : data(std::forward<Args>(args)...) {}
};

struct SomeStruct{
int a, b, c;
SomeStruct(int _a, int _b, int _c) : a(_a),b(_b),c(_c) {}
};

int main() {
WrapperClass<SomeStruct> wrapped_struct2{1,2,3}; // ok
WrapperClass<SomeStruct> wrapped_struct3 = {1,2,3}; // ok
}

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com