C ++:使用可变参数模板的类包装器
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C ++:使用可变参数模板的类包装器相关的知识,希望对你有一定的参考价值。
我想为其他类obj做一个包装。当包装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
答案
class... Args
应该是构造函数的模板参数,而不是整个类的模板参数。另外,即使struct Obj
无关紧要,您也应该在这里使用完美转发。
template <class U>
struct T
template <class ...Args>
T(Args &&... args)
data = new U(std::forward<Args>(args)...);
U *data;
;
以上是关于C ++:使用可变参数模板的类包装器的主要内容,如果未能解决你的问题,请参考以下文章
可变参数宏包装器,扩展为使用与参数数量相对应的字符格式化字符串
C++17,制作一个使用依赖于模板参数的 std::variant 的可变参数模板?