在我的理解中,存在的唯一理由std::make_pair,并std::make_tuple是,你不必自己写的类型,它们会自动推导.在C++ 1z中,我们对类模板进行了模板参数推导,这使我们可以简单地编写
std::pair p(1, 2.5); // C++1z
Run Code Online (Sandbox Code Playgroud)
代替
auto p = std::make_pair(1, 2.5); // C++11/14
Run Code Online (Sandbox Code Playgroud)
情况std::tuple类似.这导致以下问题:在C++ 1Z,有一种情况,其有利于使用std::make_pair和std::make_tuple替代使用的构造std::pair和std::tuple?
请考虑纯C++ 1z代码(即不需要向后兼容C++ 14)并假设每个人都熟悉这个C++ 1z特性.
Bar*_*rry 30
在C++ 1Z,有一种情况,其有利于使用
std::make_pair和std::make_tuple替代使用的构造std::pair和std::tuple?
每条规则都有趣的例外.你想发生std::reference_wrapper什么?
int i = 42;
auto r = std::ref(i);
pair p(i, r); // std::pair<int, std::reference_wrapper<int> >
auto q = std::make_pair(i,r); // std::pair<int, int&>
Run Code Online (Sandbox Code Playgroud)
如果你想要后者,std::make_pair就是你想要的.
此外,由于std::tuple<Ts...>是一个函数模板,您可以将其传递给另一个可能想要执行某些操作的函数模板:
template <typename... Ts>
auto foo(Ts... ts) {
return std::tuple(ts...);
}
Run Code Online (Sandbox Code Playgroud)
这似乎并不是非常有用,但有人在某处使用它来解决问题 - 你不能只是通过Ts...那里.
| 归档时间: |
|
| 查看次数: |
2170 次 |
| 最近记录: |