首页 > 解决方案 > 容器类型和编译时类型推导

问题描述

我想要一个整数向量和一些代码,以最通用的方式(在编译时)处理向量元素类型。例如:

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++templatesstlcompile-timetype-deduction

解决方案


X是对象的名称,而不是类型。您可以使用decltype(自 C++11 起)获取X.

X.push_back(rand() % std::numeric_limits<decltype(X)::value_type>::max());

推荐阅读