У меня есть на структуруПерегрузки функцию-член, на который указывает смарт-указатель
struct A {
void f() {}
void g() {}
};
и пользовательский смарт-указатель держит указатель A:
struct P {
...
A* a;
};
Я хотел бы написать P в такой так, что, что A :: F() не дозвонились, когда я пишу
P p;
p->f();
Вместо перегруженная функция должна быть вызвана. Однако, A :: г() должен еще дозвонились, когда я пишу
p->g();
Я надеялся, что я могу добиться этого путем перегрузки P :: operator-> но у меня не получилось. Какие-либо предложения?
Edit: Вот что я пробовал:
#include <iostream>
struct A {
void f() {}
void g() {}
};
struct P {
struct Wrapper
{
Wrapper(A* aa) : _a(aa) {}
void f()
{
std::cout << "Overloaded\n";
}
A* operator->()
{
return _a;
}
private:
A* _a;
};
Wrapper operator->()
{
return Wrapper(a);
}
private:
A* a;
};
main()
{
P p;
p->f();
}
Но это ничего не печатает вообще, потому что, когда я называю p-> е(), обертка :: operator-> вызывается вместо Wrapper: : F().
, если это ваш собственный смарт-указатель, чем вы можете делать все, что захотите. Я действительно не понимаю вопрос – user463035818
Что вы пробовали? Какие проблемы у вас были с этой попыткой? «Не удалось» не является полезным описанием. – user2079303
марка '->' вернуть некоторую оболочку, которая перенаправляет вызовы 'г()' 'называть Безотносительно :: г()' и 'вызовы F()' 'вызвать A :: F()' – user463035818