【发布时间】:2018-01-08 13:55:25
【问题描述】:
我试图找出一个很好的技术理由来定义一个只包含一个成员的类,而这个成员恰好是operator()。
我偶然发现有人——无论出于何种原因——创建了一个包含几个类的命名空间,但每个类只包含一个 operator() 作为成员。
我很清楚,这些类可能会像方法一样使用(很可能),但为什么这是一个好的技术方法(我假设有一个好的方法),而不是简单地定义一组单例类中的不同方法,在这种特殊情况下属于我上面提到的命名空间。
命名空间看起来像:
namespace myNamespace {
class ClassA {
public:
void operator()();
};
class ClassB {
public:
int operator()(arg1, arg2);
};
...
}
这仅仅是个人品味/风格的问题,还是高级/复杂设计的表现? 我假设这个设计包含一些我还没有收集到的智慧知识,但另一方面我还没有找到一篇讨论这个的文章或问题——这让我怀疑设计中的这种“智慧知识”。
这里的专家有什么要说的?
提前致谢!
编辑
你好! 我接受这个问题是一个重复的问题,其答案在here。
我不知道 Functor 这个词,在试图找到我的疑问的答案时(在提交这个问题之前),我没有看到对这个词的任何引用。
我仍然接受 SergeyA 的回答,因为他的回答向我介绍了这个词,他的解释是回答我的问题。他的答案 - 从我的角度来看 - 由我在上面所说的链接中找到的答案扩展。
谢谢!
【问题讨论】:
-
那么,您可以将此类的一个实例传递给库函数,这些库函数接受函子作为参数(例如
std::sort)? -
研究术语“函子”
-
@DOUGLASO.MOEN,不,这些不是意见,而是可行性的技术解释。
-
可调用对象至少在两个方面优于独立函数:更好的内联性和携带状态的能力。
标签: c++ oop operator-overloading operator-keyword