该std::get函数使用模板参数作为常规参数.
举个例子:
std::tuple <int, double, long &, const char *> bar(18, 6.5, 12, "Hello!");
cout << std::get<2>(bar); // Print the tuple’s third element.
Run Code Online (Sandbox Code Playgroud)
为什么这个功能是这样设计的?
为什么不使用常规参数呢?
例如,像:std::get(bar, 2)或std::get(2, bar)
Mik*_*our 10
函数必须具有在编译时指定的明确定义的返回类型.这里的模板特化get<2>是一个返回的函数long&; 但是你的版本必须返回一个不同的类型,具体取决于它在运行时指定的参数,这是不可能的.
希望这个演示足够解释:
int x;
std::cin >> x;
auto i = std::get(bar, x);
Run Code Online (Sandbox Code Playgroud)
请记住,在C++中,任何对象的类型必须在编译时知道,是什么类型的i?请注意,您不能将变量作为模板参数传递,您必须传递常量表达式,因此当整数是模板参数时,上述问题不存在.
也许与你的例子更相关的是这个.
std::cout << std::get(bar, x);
Run Code Online (Sandbox Code Playgroud)
每次重载operator<<都是不同的功能.根据参数在编译时确定要调用的函数.那么编译器如何确定在上面的语句中调用哪个重载?如果你有一个甚至没有过载的元组成员怎么办?
| 归档时间: |
|
| 查看次数: |
91 次 |
| 最近记录: |