【发布时间】:2021-12-18 02:56:24
【问题描述】:
以下内容有效,但当我执行 (*this)(5) 部分时感觉很难看。
struct MyStruct
{
void operator()(int a)
{
// Do something with "a"
}
void myFunc()
{
(*this)(5);
}
};
我需要重载 () 运算符并在其他类方法中使用它。
【问题讨论】:
-
this是一个指针,you can't overload the operators of pointer types 因为它们不是用户定义的。如果这种审美缺陷困扰您,C++ 可能不适合您。类似的事情到处都是。this应该是引用而不是指针,但该特性是在引用之前添加到语言中的。 -
@KarlKnechtel 我不明白你的意思。 OP 无处尝试重载或调用指针 this 的运算符。他显然是在调用
*this上的操作员,这不是一个指针。 -
@bolov 是的,所以如果这足够了,那么这里不是可重现的问题,应该关闭问题。但我认为情况并非如此。根据我的阅读,OP 希望 not 必须取消引用
this才能调用运算符。因此抱怨有效语法(*this)(5)“感觉很丑”。 原因我们必须写*this,以便“调用运算符...不是指针”,是this是一个指针(正如我所说)。因此*。取消引用指针,从而获得非指针所指对象。是吗? -
@KarlKnechtel 我不知道为什么 OP 认为这很丑陋,我只能假设并且尽可能不假设。无论如何,还有其他选项无需显式取消引用指针 this。
-
是的。但是
Bhoo这样做。我会在代码审查中叫你这样做。让operator()调用一个命名函数。然后您的代码也可以调用命名函数并进行自我记录。
标签: c++ oop overloading