Dei*_*Dei 7 c++ templates c++11
所以我们假设我们有以下代码:
#include <stack>
template<class... Args>
auto make_stack(Args&&... args)
{
std::stack<INSERT_TYPE_HERE> s;
return s;
}
int main()
{
auto s = make_stack(1, 2.2, 3); //would be std::stack<double>
auto s2 = make_stack(1l, 2, 3); //would be std::stack<long>
}
Run Code Online (Sandbox Code Playgroud)
如何在参数包中找到常见的参数类型?
使用std::common_type从<type_traits>.它是一种类型特征,它提供了可以转换为所有类型的公共类型.所以在你的情况下你需要:
template<typename... Args>
auto make_stack(Args&&... args)
{
using commonT = std::common_type_t<Args...>;
std::stack<commonT> s;
return s;
}
Run Code Online (Sandbox Code Playgroud)
编辑正如@DietmarKühl在评论中提到的,如果使用C++ 11而不是C++ 14 std::decay,commonT则可能需要使用on .std::decay从C++ 14开始,它看起来像是应用于结果类型.
| 归档时间: |
|
| 查看次数: |
830 次 |
| 最近记录: |