我用operator()遇到了这段代码.我以前从未见过这个(我见过+,>, - <<).有人可以解释何时应该使用它以及如何使用它?
class sortResults
{
public:
bool operator() (Result const & a, Result const & b);
};
Run Code Online (Sandbox Code Playgroud) 编辑:现在我对发生的事情有了更好的了解,我想我可以更好地说出这个问题,因此它更有用.
我试图在C++中复制以下delphi代码
TThread.Queue(nil,
procedure
begin
LogMessage("test");
end
);
Run Code Online (Sandbox Code Playgroud)
代码的目的是调用一个TMemo
以线程安全的方式更新表单的方法.这是我试图调用的方法的C++版本Thread.Queue
void __fastcall TClientForm::LogMessage( String message )
{
MemoLog->Lines->Add( message );
}
Run Code Online (Sandbox Code Playgroud)
因为我使用的是没有CLANG增强功能的BCC32编译器,所以不能使用Lambda.相反,根据这个文档,我需要创建一个继承TThreadProcedure
的Invoke()
方法来覆盖方法来完成我需要完成的工作.然后我可以将该类的实例传递给TThread::Queue
.
我创建了以下继承TThreadProcuedure
并包含invoke方法的类.
class TMyThreadProcedure : TThreadProcedure
{
void __fastcall Invoke( String message );
};
Run Code Online (Sandbox Code Playgroud)
但是,由于TThreadProcedure
是一个抽象类,我不能简单地创建它的实例来传递TThread::Queue
.TThreadProcedure
当我将类的实例传递到其中时,继承和定义要调用的函数的正确方法是什么TThread::Queue
?
我在推理如何编写和设计几个应该处理特定文件格式的函数,这些函数可能有不同的实现和不同的版本,每个函数需要一种不同的方法来解码文件中的这些信息.
我像往常一样浏览标准库,我得到了一个std::function
存在的余数,但问题是我无法弄清楚为什么我可能有兴趣使用std::function
,在C和C++编程时的第一个规则之一是如果你不必引用你不一定要命名的东西,你可以获得未命名的数据结构和未命名/ lambda函数,但函数通常有一个名称,而lambda的类型仍然是实现根据我的记忆定义,那么需要std::function
什么?
例如,在我的情况下,我正在考虑使用a map
或an hash table
(但所涉及的函数数量实际上很小,现在最多2-3个),其中一对由tag
(表示文件格式的版本/实现)+ functions
,我想知道为什么我不能只使用std::string
和函数指针作为每对的2种类型; 我也无法理解为什么我们std::function
在标准库中.
我的意思是,当你需要一个未命名的函数并且你需要一个对象来描述它的状态时呢?
能否请您举例说明以下陈述
语句1
普通函数只有在签名不同时才有不同的类型.但是,当函数对象的签名相同时,它们可以具有不同的类型.实际上,函数对象定义的每个函数行为都有自己的类型.这是使用模板进行泛型编程的重大改进,因为您可以将功能行为作为模板参数传递