【发布时间】:2018-09-12 07:08:39
【问题描述】:
我想要一个整数向量和一些代码,它以最通用的方式(在编译时)w.r.t 处理该向量。向量元素类型。例如:
std::vector<uint16_t> X;
...
X.push_back(rand() % std::numeric_limits<X::value_type>::max());
但是编译器说:
the value of X is not usable in a constant expression
为什么不能在这种情况下使用X::value_type?我的意思是X 的元素类型一旦用具体的元素类型声明就不能改变,这可以仅从这段代码的语法中推断出来。
如果我更改声明的X 的元素类型(另一个整数),但由于该更改不想更改push_back 字符串,应该采取什么方法?我假设任何现代 C++ 标准。
【问题讨论】:
-
泛化很好。虽然不是为了概括。如果您显示的内容确实在一个范围内,那么确实没有必要像那样扭曲您的代码。
标签: c++ templates stl compile-time type-deduction