假设我们有:
class Base {...}
class A : public Base {...}
class B : public Base {...}
是否可以设置为泛型方法的参数类型:
myMethod([typei'mlookingfor] c) {}
这样我就可以将Base,A和B传递给myMethod()
而不会重载方法?
并使其与引用和指针一起使用?
答案 0 :(得分:3)
问:是否可以将方法参数的类型定义为类或任何派生类?
答:好的。为什么不呢?
如果您想要一个可以是任意类型的“通用”参数,只需使用模板。
否则,如果你想要“类或任何子类”,只需使用基类。
有用的引用:
http://wiki.answers.com/Q/What_are_the_concepts_of_object_oriented_programming
多态性 允许程序员只处理派生类成员 喜欢他们的父类成员。更确切地说,多态性 面向对象编程是对象所属的能力 不同的数据类型响应方法调用的方法相同 名称,每一个都根据特定类型的行为而定。
我认为,这正是您所寻找的:)
答案 1 :(得分:3)
如果指针或对基类的引用适合您,请使用:
void myMethod(Base& c) {}
A a;
B b;
myMethod(a); //OK
myMethod(b); //OK
请注意,您必须使用引用或指针来阻止对象切片。如果方法为myMethod(Base c)
,则会丢失派生对象的类型信息。
如果没有,您可以使用模板
template<typename T>
void myMethod(T& c)
{
}
A a;
B b;
myMethod(a);
myMethod(b);
答案 2 :(得分:0)
有两种方法可以做到这一点。第一是动态多态。仅适用于指针和参考。运行时开销很小:
void myMethod(Base& x) { ...}
第二 - 静态多态性:
template<class T>
std::enable_if<is_base_of<Base,T>::value>
myMethod(base x) {...}