代码之家  ›  专栏  ›  技术社区  ›  BadProgrammer99

C++使用模板为原始类型创建别名?

  •  2
  • BadProgrammer99  · 技术社区  · 6 年前

    我想写些东西来包装simd的内部函数

    using vec<float, 4> = __m128;
    

    这样我可以在以后编写的代码中使用模板。这不是真正的问题,但α128是一种类型,代表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 ,但我不确定,也不知道语法。有没有办法让第一个陈述起作用或做类似的事情?

    1 回复  |  直到 6 年前
        1
  •  4
  •   Rakete1111    6 年前

    不,第一个不行。考虑到当前的规则,这是没有意义的(你不能像那样劫持模板的语法)。

    不过,你的第二个解决方案是完美的!你只需要稍微调整一下:

    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 对应结构的。