我需要将数组作为模板类型传递。如何才能实现它。例如,我想要这样的东西。
Fifo<array, Q_SIZE> f; // This is a queue of arrays (to avoid false sharing)我应该用什么来代替数组?假设我需要一个整数数组。还请注意,我不希望std::vector或指向数组的指针。我想要整个基本数组,相当于int array32。
发布于 2012-04-12 17:10:05
试试这个:
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";
}发布于 2012-04-12 17:14:32
如果要在创建队列时传递数组类型,则可以编写
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的数组了。
发布于 2015-11-01 02:10:04
std::end 11中的C++函数对数组类型具有重载,这很好地说明了这一点。
下面是它的一个可能的实现:
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);
}https://stackoverflow.com/questions/10128159
复制相似问题