c++ - 为什么 std::get 使用模板参数而不是常规参数?

标签 c++ templates

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.

为什么这个功能要这样设计?
为什么不使用常规参数呢?
例如,类似于:std::get(bar, 2)std::get(2, bar)

最佳答案

一个函数必须有一个明确定义的返回类型,在编译时指定。这里是模板特化 get<2>是一个返回 long& 的函数;但是您的版本必须根据其在运行时指定的参数返回不同的类型,这是不可能的。

关于c++ - 为什么 std::get 使用模板参数而不是常规参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18284862/

相关文章:

c++ - 是否有安全的方法来断言字符串 View 是否以 null 终止?

c++ - 在更改文件描述符 1 以引用不同的文件后,我应该如何管理::std::cout?

c++ - 为什么比较结果不符合预期?

c++ - 有什么方法可以使用 ASYNC MessageBox 吗?

C++ 将字符串转换为 typedef 或 istream 重载

c++ - 混合模板、多重继承和非默认构造函数

javascript - 迭代 Handlebars 对象?

c++ - 如果 constexpr 和 dependent false static_assert 格式错误?

templates - 找不到指定主题 id 的主题。返回默认主题

c++ - 初始化使用模板参数作为类型的模板化类的静态成员?