我正在尝试写一些东西来包装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之类的东西可能是可能的,但是我不确定,我也不知道语法。有什么办法可以使第一条语句起作用或做类似的事情?

最佳答案

不,第一个不能工作。鉴于当前的规则,这没有任何意义(您不能劫持这样的模板的语法)。

但是,您的第二个解决方案是完美的!您只需要稍作调整:

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

关于c++ - C++使用模板为原始类型创建别名吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51013033/

10-11 23:08
查看更多