0

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

这是不可能的,还是我不擅长可变参数模板?

4

1 回答 1

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>
于 2013-10-25T21:48:44.020 回答