将数组作为模板类型传递
Pass an array as template type
我需要传递一个数组作为模板类型。如何实现它。例如,我想要这样的东西。
Fifo<array, Q_SIZE> f; // This is a queue of arrays (to avoid false sharing)
我应该用什么来代替数组?假设我需要一个 int 数组。另请注意,我不想要std::vector
或指向数组的指针。我想要整个基本数组,相当于 int 数组[32]。
试试这个:
Fifo<int[32], Q_SIZE> f;
喜欢这个:
#include <iostream>
template <class T, int N>
struct Fifo {
T t;
};
int main () {
const int Q_SIZE = 32;
Fifo<int[32],Q_SIZE> f;
std::cout << sizeof f << "n";
}
如果要在创建队列时传递数组类型,可以写入
template <typename Array>
struct Fifo;
template <typename T, int size>
struct Fifo<T[size]>
{
};
或者只是
template <typename Array>
struct Fifo
{
};
并像使用它一样使用
int main()
{
Fifo<int[10]> fa;
}
然后,您应该了解,int[10]
与 int[11]
是完全不同的类型,一旦您创建了Fifo<int[10]>
您将无法再在此处存储大小为 11 或 9 的数组。
C++ 11 中的 std::end
函数对数组类型进行了重载,很好地证明了这一点。
下面是它的可能实现:
template< class T, std::size_t N >
T* end(T(&array)[N]) {
return array + N;
}
如果你需要一个包装数组的对象,模板化的工厂函数将有助于创建它:
template< class T, std::size_t N >
struct fifo {
T(&array)[N];
};
template< class T, std::size_t N >
fifo<T,N> make_fifo(T(&array)[N]) {
return Fifo<T,N>{ array };
}
int main() {
int arr[] = { 1,2,3,4,5 };
// Create object from array using template argument deduction
auto fifo = make_fifo(arr);
}
好吧,
我找到了解决方案。我可以将数组包装在一个结构中,如下所示。
typedef struct
{
int array[32];
} my_array;
然后我可以按如下方式使用它。
Fifo<my_array, Q_SIZE> f;
相关文章:
- C++默认情况下,指针类型数组的元素是否保证初始化为 nullptr?
- 类型数组?
- 如何在使用 make_unique<T[]>() 制作的模板类型数组上使用 std::fill?
- 将基本类型数组中的内存重新用于不同(但仍然是基本)类型的数组合法吗
- 在C++中返回基元类型数组(Java比较)
- 如何返回 QVariant 类型数组
- 如何在本机 c++ jni 中实现 java 类型数组
- 模板类型数组的模板类型数组
- 如何确定未知类型数组的索引是否为空
- 复杂类型数组的静态初始化
- 访问基类型数组成员(Int-to-type习惯用法)
- 如何将 char 类型数组传递给函数并将第一个字符数组复制到第二个图表数组并使用 c++ 进行比较
- 如何在C 中制作结构类型数组
- 如何创建结构类型数组的地图对象
- C++类类型数组
- C++中的Matlab类型数组
- 节点C++插件 - 当类型数组(Float32Array)作为参数传递时,如何访问它?
- 如何将二维字符类型数组逐行保存到 c 中的.txt文件中
- C++:用户定义的类型数组出错
- 在双精度类型数组中使用 memset()