所以我们假设我们有以下代码:
#includetemplate auto make_stack(Args&&... args) { std::stack s; return s; } int main() { auto s = make_stack(1, 2.2, 3); //would be std::stack auto s2 = make_stack(1l, 2, 3); //would be std::stack }
如何在参数包中找到常见的参数类型?
使用std::common_type
从
.它是一种类型特征,它提供了可以转换为所有类型的公共类型.所以在你的情况下你需要:
templateauto make_stack(Args&&... args) { using commonT = std::common_type_t ; std::stack s; return s; }
编辑正如@DietmarKühl在评论中提到的,如果使用C++ 11而不是C++ 14 std::decay
,commonT
则可能需要使用on .std::decay
从C++ 14开始,它看起来像是应用于结果类型.