|
有一个共通的功能,想做成接口或者在抽象父类里做成抽象类,但是这个功能虽然是相同的,输入和输入参数有些不同,包括有可能参数个数和参数类型不同,这种时候还有没有可能做成一个共通的接口?还是只能单独写方法? |
|
| 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;
}
|
|
名字是可以随便起的,如果把所有可能的参数全部写到一起,那按照这个思路,两个不相关的方法也能合并成一个方法了,按照调用的参数来决定执行的内容,这样不大好。
不过答案我知道了,理论上应该不可以的,要有一样的参数才能写成通用接口。 |
|