Lar*_*ars 20 c++ tuples const c++11
在C++ 0x中,可以创建一个constexpr std :: tuple,例如
#include <tuple>
constexpr int i = 10;
constexpr float f = 2.4f;
constexpr double d = -10.4;
constexpr std::tuple<int, float, double> tup(i, f, d);
Run Code Online (Sandbox Code Playgroud)
还可以在运行时查询std :: tuple,例如通过
int i2 = std::get<0>(tup);
Run Code Online (Sandbox Code Playgroud)
但是在编译时无法查询它,例如,
constexpr int i2 = std::get<0>(tup);
Run Code Online (Sandbox Code Playgroud)
将抛出编译错误(至少使用最新的g ++快照2011-02-19).
有没有其他方法在编译时查询constexpr std :: tuple?
如果没有,是否有一个概念上的原因,为什么不应该查询它?
(我知道避免使用std :: tuple,例如,通过使用boost :: mpl或boost :: fusion,但不知何故,如果不在新标准中使用元组类,这听起来是错误的......).
顺便问一下,有人知道为什么
constexpr std::tuple<int, float, double> tup(i, f, d);
Run Code Online (Sandbox Code Playgroud)
编译好,但是
constexpr std::tuple<int, float, double> tup(10, 2.4f, -10.4);
Run Code Online (Sandbox Code Playgroud)
不?
非常感谢提前! - 啦
Ant*_*ams 12
std::get
没有标记constexpr
,所以你不能用它来检索值从tuple
一个constexpr
背景下,即使是元组本身constexpr
.
不幸的是,实现std::tuple
是不透明的,所以你也不能编写自己的访问器.