有一个共通的功能,想做成接口或者在抽象父类里做成抽象类,但是这个功能虽然是相同的,输入和输入参数有些不同,包括有可能参数个数和参数类型不同,这种时候还有没有可能做成一个共通的接口?还是只能单独写方法? |
|
10分 |
有没有可能定义一个接口,可以选一部分参数或者通过参数转换来调用任何一个实现?
|
20分 |
一定要做成通用的接口不是不可以,根据你的描述,方法名字一样,但是参数列表不一样。可以这样,把本来的方法参数列表全部写到一个结构体里面,通过结构体的继承解决参数不同的情况。至于好不好用,你自己决定。
#include <stdio.h> struct BaseInput { virtual void __dummy_func () {} // for dynamic_cast }; struct Derive1Input : public BaseInput { int arg; }; struct Derive2Input : public BaseInput { float arg; }; class Base { public: virtual void Method (BaseInput *p) {} }; class Derive1 : public Base { public: virtual void Method (BaseInput *p) { Derive1Input *d1 = dynamic_cast<Derive1Input *>(p); if (d1) { // TODO } else { printf ("Derive1 Wrong input\n"); } } }; class Derive2 : public Base { public: virtual void Method (BaseInput *p) { Derive2Input *d2 = dynamic_cast<Derive2Input *>(p); if (d2) { // TODO } else { printf ("Derive2 Wrong input\n"); } } }; int main () { Derive1 derive1; Derive2 derive2; Derive1Input input1; Derive2Input input2; printf ("test 1\n"); derive1.Method (&input1); derive2.Method (&input2); printf ("test 2\n"); derive1.Method (&input2); derive2.Method (&input1); return 0; } |
名字是可以随便起的,如果把所有可能的参数全部写到一起,那按照这个思路,两个不相关的方法也能合并成一个方法了,按照调用的参数来决定执行的内容,这样不大好。
不过答案我知道了,理论上应该不可以的,要有一样的参数才能写成通用接口。 |