【问题标题】:How to derive from a variadic template class in C++ [closed]如何从 C++ 中的可变参数模板类派生[关闭]
【发布时间】:2015-05-01 13:28:30
【问题描述】:

我有可变参数模板类,它只是 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...>

【问题讨论】:

  • 这对我来说是正确的,您使用的是什么编译器和版本? (我冒昧地修复了SomeObject的构造函数名称,从不是错误原因的错误消息来看)
  • DbgGameObject 嗯?所以你没有发布你正在测试的代码。测试 MCVE,然后发布错误消息,因为它显示为 该 MCVE
  • 没有VS14 CTP 6。
  • @Fabian:那是 VS15 CTP 6。

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


【解决方案1】:

The code is fine.

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

【讨论】:

  • 我使用的是最新版本的Visual Studio 2015,无法切换编译器
  • 那么你不能做你想做的事,除非你找到一个解决方法或者等到微软发布一个修复了这个错误的新版本。
  • 重启后,清理并重建它编译没有错误。很抱歉在这些废话上浪费了你的时间-_-
  • @Fabian:那么旧代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-18
  • 1970-01-01
相关资源
最近更新 更多