【发布时间】:2019-07-10 10:38:02
【问题描述】:
我正在使用模板化的 C++ 类。
我实例化了这个类的两个不同的模板化版本:
ExampleClass<ParamType1> obj1;
ExampleClass<ParamType2> obj2;
这样我就有了两个对象,它们是同一个类,但具有不同的模板参数。
我现在希望能够定义一个可以将 obj1 或 obj2 作为参数的函数(极其简化的示例!):
int func(ExampleClassXXX obj_param)
{
return obj_param.member_operation();
}
这样我就可以打电话给func(obj1) 或func(obj2。
这是可能的吗?如果是,函数定义指定obj_param参数所需的语法是“使用任何模板参数创建的ExampleClass的实例”?
this question 的答案涵盖了更普遍的情况——“obj_param”是任何类型。该答案的文本中缺少大部分细节,只有当您单击“实时演示”时,您才会看到他们正在实例化一个模板化的struct 以便能够传入通用参数,这非常难看.
这似乎应该是一件常见的事情,但谷歌搜索到目前为止让我失败(搜索“将模板化对象作为函数参数传递”)
【问题讨论】:
-
“所以我有两个对象,它们是同一个类,但具有不同的模板参数。” -
obj1和obj2是不同的、不相关的类的对象.func也需要是模板,例如template<typename x_Param> int func(ExampleClass<x_Param> obj_param) -
使函数成为模板函数,或者声明一个基类并将其作为参数
-
ExampleClass是模板,ExampleClass<ParamType1>是类。