我正在尝试写一些东西来包装simd内部函数,我认为做类似
的事情会很好。using vec<float, 4> = __m128;
以便我可以在稍后编写的某些代码中使用模板。这实际上与问题无关,但是__m128是代表4个浮点数的类型。这不起作用,并且g ++说expected nested-name-specifier before 'vec'
。我知道我可以编写类来包装它们,或者可以做类似的事情:
template <typename T, int N> struct vec;
template<> struct vec<float, 4>
{
typedef __m128 type;
};
然后我可以使用vec<float,4>::type
,但是第一种方法要方便得多。我认为使用C++ template typedef之类的字词可能是可行的,但是我不确定,我也不知道语法。有什么方法可以使第一条语句起作用或做类似的事情?
答案 0 :(得分:4)
不,第一个无效。鉴于当前的规则,这没有任何意义(您无法劫持这样的模板的语法)。
您的第二个解决方案却是完美的!您只需要稍作调整:
namespace impl {
template <typename T, int N> struct vec;
template<> struct vec<float, 4>
{
typedef __m128 type;
};
}
template<typename T, int N>
using vec = typename impl::vec<T, N>::type;
现在vec
是一个实际模板,它引用相应结构的type
。