在哪里定义许多派生类使用的仿函数?

时间:2012-05-22 07:45:31

标签: c++

我的代码中常见的一种情况是,我有一个仿函数,它被层次结构中的许多类使用。

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

我不喜欢这个解决方案,因为它使我的基类混乱了很多小的仿函数,这些仿函数只是内部的,即使它们不能被公众访问,也会降低我的基类的可读性。

您是否知道此方案的其他任何解决方案?

3 个答案:

答案 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;
    }
};