【问题标题】:C++ create aliases for primitive types using templates?C++ 使用模板为原始类型创建别名?
【发布时间】:2018-06-24 18:58:23
【问题描述】:

我正在尝试编写一些东西来包装 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&lt;float,4&gt;::type,但第一种方式更方便。我认为使用C++ template typedef 之类的东西可能是可能的,但我不确定,而且我不知道语法。有什么方法可以使第一个语句起作用或做类似的事情吗?

【问题讨论】:

标签: c++ c++11 templates typedef


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多