如何从C ++中的可变参数模板类派生

时间:2015-03-01 00:38:37

标签: c++ c++11 inheritance variadic-templates stdtuple

我有variadic模板类,它只是std :: tuple的包装器:

template <typename ... Child>
class Tpl
{
public:
    Tpl() {}
    Tpl(Child ...args) : child(args...)
    {}

    template <typename T>
    T& Get()
    {
        return std::get<T>(child);
    }

    template <typename T>
    const T& GetConst()
    {
        return std::get<T>(child);
    }
private:
    std::tuple<Child ...> child;
};

如何从Tpl正确派生课程?

template <typename... Ts>
class SomeObject : public Tpl<Ts...>
{
public:
    SomeObject(/*Types ... args*/) /*: child(args...)*/
    {

    }
private:
    int num;        
};

编译器(VS14 CTP 6)消息告诉我:

syntax error: missing ',' before '<' in the line: class SomeObject: public Tpl<Ts...>

1 个答案:

答案 0 :(得分:1)

<强> The code is fine

您没有告诉我们您正在使用的编译器(包括其版本),但可能是它对可变参数模板的支持有限/不支持,或者在这方面存在问题。考虑升级它或完全切换到其他东西。 GCC和Clang都很好。