我有一个愚蠢的 C++ 设计问题。有没有一种方法可以让一个类与多个类中的方法具有相同的方法名称(因此,具有相同的 API)?
我现在的情况是我有上课的情况
struct A
{
void foo() { std::cout << "A::foo" << std::endl;}
void boo() { std::cout << "A::boo" << std::endl;}
};
struct B
{
void moo() { std::cout << "B::moo" << std::endl;}
void goo() { std::cout << "A::goo" << std::endl;}
};
.... imagine possibly more
我真正想要的是另一个类,它充当这些功能的接口。我可能会误解为立面设计模式一个简单的接口隐藏了上面实例化类的复杂性,但仍然使用它们相同的接口。
struct C
{
void foo() { ... }
void boo() { ... }
void moo() { ... }
void goo() { ... }
};
对于上面显示的少量方法,通过声明结构体 A 和 B 或将它们作为参数传递给结构体 C 并在 C 中调用 A 和 B 的方法是可行的,但如果 A 有 40 个方法而 B 有 30 个方法,则这是不切实际的方法。如果我能做得更好的话,在 C 中重新声明 70 个同名的方法来调用 A 和 B 的底层方法似乎毫无理由地有很多冗余。
我想到了使用基类的第二种解决方案
struct base
{
void foo() { }
void boo() { }
void moo() { }
void goo() { }
};
struct A : public base
{
void foo() { std::cout << "A::foo" << std::endl;}
void boo() { std::cout << "A::boo" << std::endl;}
};
struct B : public base
{
void moo() { std::cout << "B::moo" << std::endl;}
void goo() { std::cout << "A::goo" << std::endl;}
};
尝试使用具有所有函数定义的shared_ptr。例如
std::shared_ptr<base> l_var;
l_var->foo();
l_var->boo();
l_var->moo();
l_var->goo();
这仍然没有给我想要的东西,因为一半的方法是在结构体 A 中定义的,而另一半是在结构体 B 中定义的。
我想知道是否多重继承可以解决这个问题,但在学校我听说进行多重继承是不好的做法(调试很难?)
有什么想法或建议吗?基本上,管理结构 A 和 B 更容易(等等,因为它是用于抽象目的的自己的类)。但希望能够以某种方式在某些包装器中灵活地调用其方法,其中这种复杂性对用户隐藏。