首页 > 解决方案 > 模板函数:是否有接受任何参数类型的语法,就像 'auto' 对 lambdas 所做的那样?

问题描述

我正在尝试编写一个接受复杂参数的函数。假设它可以是一个类,也可以是一个类模板。函数内部的代码对于所有参数都是相同的,我不需要在任何地方引用参数的类型。所以,我想写这样的东西:

auto func(auto& someComplicatedClassInstance) {
   return someComplicatedClassInstance.someMemberFunc();
}

我不能只写template <typename T>,因为如果 T 本身是一个模板,它就行不通,而auto函数参数在 C++ 中不是一个东西。制作funclambda 是唯一的方法吗?为 lambdas 启用相同的编译器功能而不是普通函数似乎很奇怪。在我的具体情况下,我正在编写一个重载,operator<<所以我不能让它成为一个 lambda。

标签: c++c++17

解决方案


您可以使用函数模板:

template <typename T>
auto func(T&& someComplicatedClassInstance) {
   return std::forward<T>(someComplicatedClassInstance).someMemberFunc();
}

推荐阅读