在哪里定义许多派生类使用的函子
Where to define functors used by many derived classes?
我的代码中的一个常见场景是我得到了一个由层次结构中的许多类使用的函子。
为了使所有类都可以访问并保持 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;
}
};
相关文章:
- 在提升multi_index容器中,是否定义了"default index"?
- #定义c-预处理器常量..我做错了什么
- 用C++中的一个变量定义一个常量
- 部分定义/别名模板模板参数
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- #为""定义宏;静态";针对不同的上下文
- 如何确保C++函数在定义之前声明(如override关键字)
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 处理许多自定义异常的最佳方法是什么
- OpenGL / GLUT - 许多未定义的引用
- 为具有许多数据成员的结构定义 == 和<
- 定义字符串时C++许多错误
- wxWidget获取许多未定义的引用
- 如果构建和破坏了许多向量,自定义分配器会提高性能<T>吗?
- 在哪里定义许多派生类使用的函子
- QListWidget性能与许多自定义项目
- 在C++中定义许多组合对象的最佳方法
- #include < windows.h> 在全局命名空间中定义了许多符号,例如 Polygon
- 在 Eclipse 中使用 OpenCV 在项目中C++构建错误:对"SelectObject@8"的未定义引用 + 许多其他错误