当您可以使用构造函数时,为什么要在 C++ class 或结构中重载 () 运算符(可调用运算符)?
Why overload the () operator (callable operator) in a C++ class or struct when you could use a constructor?
为什么要重载 C++ class 中的 () 运算符或 C++11 或更高版本中的结构?据我所知,当您想将 classes 或结构之类的对象传递到 std::thread 并启动一个带有数据包的新线程时,这些运算符会过载,通过可调用类型。
但除此之外,为什么还要重载 () 运算符?不能简单地在 class 或结构的构造函数中做同样的事情吗?
为什么使用
struct MyCallableStruct{
void operator() () {
dosomething();
}
}
什么时候可以做
struct MyCallableStruct{
MyCallableStruct() { dosomething(); }
}
他们完全不同。
首先也是最重要的,当你使用operator()时,它可以作为函数参数传递(通过对象)。
相比之下,通过constructor实现时,只能通过模板传递(通过class)
其次,operator()可以在对象创建后多次调用,
而构造器只能在构造时调用
总而言之,它们在不同的场景中是不同的和有用的
为什么要重载 C++ class 中的 () 运算符或 C++11 或更高版本中的结构?据我所知,当您想将 classes 或结构之类的对象传递到 std::thread 并启动一个带有数据包的新线程时,这些运算符会过载,通过可调用类型。 但除此之外,为什么还要重载 () 运算符?不能简单地在 class 或结构的构造函数中做同样的事情吗?
为什么使用
struct MyCallableStruct{
void operator() () {
dosomething();
}
}
什么时候可以做
struct MyCallableStruct{
MyCallableStruct() { dosomething(); }
}
他们完全不同。
首先也是最重要的,当你使用operator()时,它可以作为函数参数传递(通过对象)。 相比之下,通过constructor实现时,只能通过模板传递(通过class)
其次,operator()可以在对象创建后多次调用, 而构造器只能在构造时调用
总而言之,它们在不同的场景中是不同的和有用的