动态类成员

时间:2013-10-25 21:44:41

标签: c++ templates dynamic c++11

我是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;
};

这是不可能的,还是我对可变参数模板不满意?

1 个答案:

答案 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>