我是C ++ 11的可变参数模板的新手,并且不知道我做错了什么是一个简单的语法错误,或者是不可能的。 我想写下面的内容:
template< typename... Args >
struct Test
{
Args... args;
Test( Args... args_ ) : args( args_... ) {
}
};
基本上这个类会有“伪动态成员”。 我试过这个:
struct A {};
template< typename... Args >
A* MakeB( Args... args )
{
struct B : public A
{
Args... args;
B( Args... args_ ) : args( args_... ) {
}
};
return new B;
};
这是不可能的,还是我对可变参数模板不满意?
答案 0 :(得分:4)
包不是类型,不能像类型一样使用。它们是一种仅用于模板的特殊结构。你不能拥有“包会员”。
典型的解决方案是拥有一个元组成员:
#include <tuple>
template< typename... Args >
struct Test
{
std::tuple<Args...> args_;
Test(Args const &... args)
: args_(args_...)
{ }
};
你的小制作者看起来像这样:
template <typename ...Args>
Test<Args...> make_test<Args const &... args)
{
return Test<Args>(args...);
}
用法:
auto t = make_test(1, true, 'x'); // makes a Test<int, bool, char>