0

C ++には演算子があるので、オーバーロードしないでください

演算子'。' オーバーロードできないこれらの演算子の1つです。

しかし、最良の知識のために、このオーバーロードは悪いですか?

本当に悪いと思います。
しかし、オブジェクトまたはオブジェクトへのポインタがあるかどうかを知る必要はありません。
しかし、これは面白くて危険です

class A {
     public:
           get_int(){ return a } 
           A(){ a=1 }
           operator A*(){ return this }
     private: int a;
};
int main(){
    A a;
    A* c = a;
    //here, c->get_int() will return 1
}
4

1 に答える 1

2

ポインターかどうかに関係なく、->ユニバーサルx->foo()構文を許可するには、間接演算子をオーバーロードする必要があります。x

T * T::operator->() { return this; }

使用法:

T x, * p = &x;
p->foo(); // OK as usual
x->foo(); // also OK, weirdly

例:

#include <cstdio>
struct Foo
{
    void foo() { std::puts("Boo"); }
    Foo * operator->() { return this; }
};

int main() { Foo x, * p = &x; p->foo(); x->foo(); }
于 2012-08-03T12:34:34.957 に答える