【问题标题】:c++11 syntax variadic templates expand with rebindc++11 语法可变参数模板用 rebind 扩展
【发布时间】:2014-11-30 14:24:40
【问题描述】:

这是一个有效的 c++ 语法吗?

template<typename Var, typename T>
struct rebindVar;

template<typename Var, typename... T>
struct rebindVar<Var, std::tuple<T...> > {
  typedef typename std::tuple< typename T::template rebindVar<Var>::type... > type;
};

在 gcc 中工作,在 vs2013 中不起作用。错误消息说:

Error   1   error C3546: '...' : there are no parameter packs available to expand   C:\Users\Alexandros\Desktop\project\tnnlib\src\NeuralNetwork\NeuralNetwork\Perceptron\Perceptron.h  55  1   NeuralNetwork_ut

【问题讨论】:

    标签: visual-c++ c++11 gcc metaprogramming


    【解决方案1】:

    MSVC 的可变参数模板实现非常混乱,许多稍微复杂的扩展模式都不起作用。通常的解决方法是将复杂部分提取到帮助模板中。试试这个:

    template <typename Var, typename T>
    struct rebindOne { typedef typename T::template rebindVar<Var>::type type; };
    
    template<typename Var, typename... T>
    struct rebindVar<Var, std::tuple<T...> > {
      typedef typename std::tuple< typename rebindOne<Var, T>::type... > type;
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-28
      • 1970-01-01
      • 1970-01-01
      • 2012-08-16
      • 1970-01-01
      • 1970-01-01
      • 2014-04-12
      • 1970-01-01
      相关资源
      最近更新 更多