C++语言允许我编写一个模板函数,它将调用传递给函数的对象的方法。
这里的问题是,当我这样做时,我的IDE(NetBeans 8.2)会抱怨它不能解决这个方法。这是有意义的,因为在我试图编译代码之前,将用于“T”的类型是未知的,但它给我一个警告,这让我有点担心这样做是否是一种糟糕的编程实践。
请考虑以下代码:
struct S1 {
void method() const {
cout << "Method called from S1!" << endl;
}
};
struct S2 {
void method() const {
cout << "Method called from S2!" << endl;
}
};
template <typename T>
void call_method(const T& object) {
object.method();
}
用法示例:
S1 obj1;
S2 obj2;
call_method(obj1);
call_method(obj2);
这段代码可以编译并正常工作,但是IDE总是会抱怨。这样可以吗?或者有更好的设计,我应该知道,以获得同样的预期结果。
期望的结果是编写一个函数,该函数可以使用S1或S2对象,而无需关心它是哪个对象,只要它们提供一个包含“method()”的接口。
假设我无法访问S1和S2的源代码,因此无法对它们进行更改。(例如,我不能让它们从公共基类继承并使用动态多态性而不是模板函数来实现相同的效果)。