在哪里定义许多派生类使用的函子

Where to define functors used by many derived classes?

本文关键字:定义 许多 派生 在哪里      更新时间:2023-10-16

我的代码中的一个常见场景是我得到了一个由层次结构中的许多类使用的函子

为了使所有类都可以访问并保持 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()();
    }
};

我不喜欢这个解决方案,因为它使我的基类与许多小函子混乱,这些函子只是内部的,即使公众无法访问它们,它们也会降低我的基类的可读性。

您知道这种情况的任何其他解决方案吗?

只需在新文件中实现您的函子 ( BaseClassFunctors.cpp + BaseClassFunctors.h (。将它们放在带有可选子命名空间(例如命名空间 main.internal(的命名空间中。

现在,您可以将头文件包含在所需的任何派生类中,而不会使基类标头混乱。

尽管我(显然还有其他人(讨厌多重继承,但它在这里会派上用场。

只需创建一个包含所有函子的第二个类,并在从 Base 派生的子类中继承 Base 和这个新类。

您可以在其他地方实现函子,并且仍然将其保留为 Base 的成员:

class Base
{
protected:
    struct CommonFunctor;
};   
struct Base::CommonFunctor
{
    bool operator()()
    {
        return true;
    }
};