我的代码中常见的一种情况是,我有一个仿函数,它被层次结构中的许多类使用。
为了使所有类都可以访问它并保持DRY,我通常将它定义为我的基类的受保护的内部结构:
class Base
{
protected:
struct CommonFunctor
{
bool operator()()
{
return true;
}
};
};
class DerivedA : public Base
{
void FooA()
{
bool test = CommonFunctor()();
}
};
class DerivedB : public Base
{
void FooB()
{
bool test = CommonFunctor()();
}
};
我不喜欢这个解决方案,因为它使我的基类混乱了很多小的仿函数,这些仿函数只是内部的,即使它们不能被公众访问,也会降低我的基类的可读性。
您是否知道此方案的其他任何解决方案?
答案 0 :(得分:1)
只需在新文件(BaseClassFunctors.cpp
+ BaseClassFunctors.h
)中实施您的仿函数即可。使用可选的子名称空间(例如命名空间main.internal)将它们放在命名空间中。
现在,您可以将头文件包含在所需的任何派生类中,而不会使基类标题混乱。
答案 1 :(得分:0)
尽管我(以及显然,其他所有人)都讨厌多重继承,但它会派上用场。
只需创建一个包含所有仿函数的第二个类,并在从Base
派生的子类中继承Base
和这个新类。
答案 2 :(得分:0)
您可以在其他地方实现仿函数,并将其保留为Base的成员:
class Base
{
protected:
struct CommonFunctor;
};
struct Base::CommonFunctor
{
bool operator()()
{
return true;
}
};