c++ - 容器类型和编译时类型推导
问题描述
我想要一个整数向量和一些代码,以最通用的方式(在编译时)处理向量元素类型。例如:
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++ 标准。
解决方案
X
是对象的名称,而不是类型。您可以使用decltype
(自 C++11 起)获取X
.
X.push_back(rand() % std::numeric_limits<decltype(X)::value_type>::max());
推荐阅读
- java - 为什么我们在这个问题中需要接口?
- angular - 带有新实例的 Angular FormBuilder 验证器
- elasticsearch - 如何使用 IntelliJ HTTP Client for Elastic Search 对正文进行 GET 查询?
- outlook - 使用 Graph API 检索用户定义的属性(用于 Outlook 电子邮件)
- c++ - 如何创建监听两个不同端口的 boost::asio 服务器
- javascript - 如何在 discord.js v12 中列出所有公会成员
- linux - 您如何正确清理和重用 SysV 共享内存段?
- jmeter - 在 Jmeter 中进行性能测试的正确方法
- node.js - 当我们使用 mern 堆栈时,令牌存储在后端的什么位置?
- sass - Sass 参数/变量从何而来?