【发布时间】:2015-04-11 09:09:50
【问题描述】:
我想要一个模板化函数中的静态数组,其长度取决于函数专用的类型。我的第一次尝试是:
标题:
template<typename T>
struct Length {
const static size_t len;
};
template<typename T>
void func(){
static T vars[Length<T>::len]; // len not const. according to compiler!
// ...
}
源文件:
template<> const size_t Length<double>::len = 2;
template<> const size_t Length<float>::len = 1;
// ...
但是,g++ 没有编译这个并抱怨
错误:“vars”的存储大小不是恒定的
那么,这里到底有什么问题呢?我知道固定长度数组的大小需要是一个常数并且在编译时已知,但这里似乎就是这种情况。 当我写作时
const size_t len = 2;
void func(){
static double vars[len];
}
它编译没有问题。
问题:
代码有什么问题,有哪些替代方法可以实现所需的行为?我不想在运行时分配内存...
【问题讨论】:
标签: c++ arrays templates template-specialization