我想为其他类objs包装一个包装。当包装器obj初始化时,我希望能够将要传递给内部obj的参数传递给其构造函数:
template <class U, class... Args> struct T {
T(Args... args) {
data = new U(args...);
}
U* data;
};
我做了一个假人Obj
:
struct Obj {
Obj(int a, int b) {
this->a = a;
this->b = b;
}
int a;
int b;
};
现在,我不想使用Obj obj(1, 2)
对其进行初始化,而是要使用包装器,因为我会进行一些计算和管理。所以我想要实现的是:
T<Obj> obj(1, 2); // doesn't work, this is what I want to achieve
T<Obj, int, int> obj(1, 2); // works, but it's not what I want it to look like
答案 0 :(得分:1)
class... Args
应该是构造函数的模板参数,而不是整个类的模板参数。同样,即使struct Obj
无关紧要,您也应该在这里使用完美转发。
template <class U>
struct T
{
template <class ...Args>
T(Args &&... args)
{
data = new U(std::forward<Args>(args)...);
}
U *data;
};