获取参数包中的参数类型

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)

如何在参数包中找到常见的参数类型?

vso*_*tco 8

使用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开始,它看起来像是应用于结果类型.