保留别名模板实例化信息

时间:2014-08-19 07:19:41

标签: c++ gcc c++11 clang

我正在尝试在gcc vector extensions上编写一个C ++ 11库,该clang也尝试兼容。所以我开始介绍矢量类型的一些特征:

template <typename T, unsigned N> struct vector_traits;

template <>
struct vector_traits<float, 3>
{
  static constexpr auto size = 3;

  using value_type = float;    
  using vector_type = value_type __attribute__((vector_size(16)));
};

template <>
struct vector_traits<float, 4>
{
  static constexpr auto size = 4;

  using value_type = float;    
  using vector_type = value_type __attribute__((vector_size(16)));
};

注意,2个特质专业化几乎是一样的。然后我想:

template <typename T, unsigned N>
using vector = typename vector_traits<T, N>::vector_type;

但无法推断出别名模板。所以,我无法推断出我是否用N = 3或4实例化了向量。是否存在保留此信息的方法,而不引入包装类/结构?说

template <typename T, unsigned N>
struct vector<T, N>
{
   typename vector_traits<T, N>::vector_type data_;
};

0 个答案:

没有答案