C++ 计算图书馆数据类型模板

C++ 计算图书馆数据类型模板,c++,templates,arm,simd,C++,Templates,Arm,Simd,在中,我们可以有各种类型的张量对象。在选择张量类型时,我们将该类型传递给张量分配器的初始化器,如float32: my_tensor.allocator()->init(armcl::TensorInfo(shape_my_tensor, 1, armcl::DataType::F32)); 可以找到一个更好的关于张量分配主题的介绍 有几种ARMCL类型可供选择()。请注意,ComputeLibrary类型不是基元类型,尽管可以轻松地将基元类型的数据复制到它们 但是,在编写模板化C++代

在中,我们可以有各种类型的张量对象。在选择张量类型时,我们将该类型传递给张量分配器的初始化器,如float32:

my_tensor.allocator()->init(armcl::TensorInfo(shape_my_tensor, 1, armcl::DataType::F32));
可以找到一个更好的关于张量分配主题的介绍

有几种ARMCL类型可供选择()。请注意,ComputeLibrary类型不是基元类型,尽管可以轻松地将基元类型的数据复制到它们

<>但是,在编写模板化C++代码时,可以使用任意类型的函数,这种“类型选择不是类型”会产生设计问题。 假设我想写一个函数,它接受基本类型的数据,如
int
float
double
。在模板函数中,此类型将被称为类型
T
(或其他类型)

现在假设我想把这个数据复制到模板函数范围内的ARMCL张量。这个张量需要初始化为正确的数据类型。我们需要这个数据类型非常适合类型
T
,因此如果
T
float
,那么我们的ARMCL应该是类型
F32
,如果
T
int
,那么我们的张量应该是
S8
,等等

我们需要在原语类型和ARMCL类型之间进行某种映射

一个“好”且明智的方法是使用一个实用函数,该函数采用类型
T
,可能使用switch语句,类似于
std::is_same
。然后,switch语句将为
T
?或者有没有其他更优雅的方法


我一直在四处寻找,看看这是否已经得到处理,但还没有结果。如果没有处理,那么这可能不是一个特定于ARMCL的问题,而且范围更广。

好吧。。。如果我理解正确,armcl类型是枚举值

因此,一种可能的方法是一个模板结构,它具有完全的专门化,其中包含一个

我是说。。。像

template <typename>
struct typeMap;

template <>
struct typeMap<int>
 { static constexpr auto value = armcl::DataType::S8; };

template <>
struct typeMap<float>
 { static constexpr auto value = armcl::DataType::F32; };

// other cases 
模板
结构类型图;
样板
结构类型映射
{static constexpr auto value=armcl::DataType::S8;};
样板
结构类型映射
{static constexpr auto value=armcl::DataType::F32;};
//其他情况
您可以按如下方式使用它

template <typename T>
void foo ()
 { bar(typeMap<T>::value); }
模板
void foo()
{bar(typeMap::value);}

“T并且可能使用switch语句,以及类似于
std::is_same
“不,这种方法会失败,因为
switch()
是在运行时进行计算的。通常的方法是SFINAE和specialization,可以在编译时进行计算。我的眼睛已经打开了一个更大的世界,以前从未听说过斯菲奈。我会调查的。感谢您解释我的方法可能不起作用的原因这正是我一直在寻找的解决方案,谢谢!typeMap结构本质上是可重用的,并且易于添加。好模式