如何在关键字 this 上调用重载的 () 运算符?
How can I invoke an overloaded () operator on the keyword this?
以下工作正常,但当我执行 (*this)(5)
部分时感觉很难看。
struct MyStruct
{
void operator()(int a)
{
// Do something with "a"
}
void myFunc()
{
(*this)(5);
}
};
我需要重载 ()
运算符并在其他 class 方法中使用它。
您有几个选择:
(*this)(5)
this->operator()(5)
或 operator()(5)
创建一个您可以在 operator()
中调用的方法,例如:
void do_work(int a) { /* ... */ }
void operator()(int a) { do_work(a); }
void myFunc() { do_work(5); }
你选择哪个只是个人品味的问题。
只是为了好玩,这里还有一些(荒谬的)选项:
std::invoke
(评论中提到):
std::invoke(&MyStruct::operator(), this, 5);
-
auto call_op = std::mem_fn(&MyStruct::operator());
call_op(this, 5);
λ:
auto call_op = [this] (int a) { operator()(a); };
call_op(5);
-
auto call_op = std::bind_front(&MyStruct::operator(), this);
call_op(5);
以下工作正常,但当我执行 (*this)(5)
部分时感觉很难看。
struct MyStruct
{
void operator()(int a)
{
// Do something with "a"
}
void myFunc()
{
(*this)(5);
}
};
我需要重载 ()
运算符并在其他 class 方法中使用它。
您有几个选择:
(*this)(5)
this->operator()(5)
或
operator()(5)
创建一个您可以在
operator()
中调用的方法,例如:void do_work(int a) { /* ... */ } void operator()(int a) { do_work(a); } void myFunc() { do_work(5); }
你选择哪个只是个人品味的问题。
只是为了好玩,这里还有一些(荒谬的)选项:
std::invoke
(评论中提到):std::invoke(&MyStruct::operator(), this, 5);
-
auto call_op = std::mem_fn(&MyStruct::operator()); call_op(this, 5);
λ:
auto call_op = [this] (int a) { operator()(a); }; call_op(5);
-
auto call_op = std::bind_front(&MyStruct::operator(), this); call_op(5);