开发者问题收集

传递数组作为模板类型

2012-04-12
27464

我需要将数组作为模板类型传递。如何实现。例如,我想要这样的东西。

Fifo<array, Q_SIZE> f; // This is a queue of arrays (to avoid false sharing)

我应该用什么来代替 array ?假设我需要一个 int 数组。另请注意,我不需要 std::vector 或指向数组的指针。我想要整个基本数组,相当于 int array[32]

3个回答

尝试一下:

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";
}
Robᵩ
2012-04-12

如果您想在创建队列时传递 数组类型 ,您可以写入

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 的数组。

Lol4t0
2012-04-12

好吧,我找到了一个解决方案。我可以将数组包装在一个结构中,如下所示。

typedef struct
{
 int array[32];
} my_array;

然后我可以按如下方式使用它。

Fifo<my_array, Q_SIZE> f; 
pythonic
2012-04-12