所以想象我有一个函数add
template<class type>
type* add(type*,type* x, int len)
{
type *result = new type[len];
for(int i = 0; i < len; i += simd_reg_size)
{
// do addition here
}
return result;
}
我想使用模板特化,以便为我想支持的每种数据类型编写专门的添加函数,但似乎我认为的语法无效。
template<>
__m256 SIMD_add<float>(__m256 x, __m256 y){
return _mm256_add_ps(x, y);
}
我不是c ++专家,但据我所知,我必须在参数或参数中使用模板类型。我还想过写一个类似于
的宏#define simd_add(x, y, type)
if type == int
simd_add_integer(x, y)
然而,环顾四周,似乎没有办法在宏中实际执行条件语句。我该怎么办 ?对我来说很重要的是语法足够灵活,允许我除了x86之外还抽象arm等架构。
答案 0 :(得分:0)
对于模板函数,特殊化类型直接定义在您使用模板类类型的位置,而不像您那样附加到函数名称。
因此__m256
的专用函数将是
template<>
__m256 SIMD_add(__m256 x, __m256 y){
return _mm256_add_ps(x, y);
}
就像你提到的,如果你想添加你的&#34;添加&#34;模板类的方法,无论专业化,只需将其声明为标准方法即可。
您可以查看一下Explicit specializations of function templates,这是关于__m256 registers addition的类似问题。
答案 1 :(得分:0)
事实证明,我可以简单地创建一个模板类,并且所有方法都是静态的,编译器将允许我在不使用函数中的模板类型的情况下进行模板特化。