Sobrecarga de operator->()

12 views
Skip to first unread message

Juan Manuel Ollé

unread,
May 8, 2018, 9:04:11 AM5/8/18
to cp...@googlegroups.com
Hola,

Se puede aplicar a la sobrecarga del operador->() si hay un raw pointer en el medio de la cadena?
El ejemplo

class A
{
public:
    int n;
    void f() {}
};

class W
{
    std::shared_ptr<A> a;
public:
    W(std::shared_ptr<A> a) : a(a) {}
    std::shared_ptr<A> operator->() const
    {
        return a;
    }
};


int main()
{
    auto a = std::shared_ptr<A>(new A);    
    W * w1 = new W(a);
    W w2(a);

    w1->f(); // esto no anda
    w2->f(); // esto si anda
        
}

La pregunta viene porque me gustaría meter un objeto del tipo W en otro shared_ptr.

Muchas Gracias
Juan Manuel

dgutson .

unread,
May 8, 2018, 1:12:14 PM5/8/18
to cppba
lo que quisiste hacer fue

w1.operator->()->f();

pero resulta que w1 es de tipo W*.



--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.



--
Who’s got the sweetest disposition?
One guess, that’s who?
Who’d never, ever start an argument?
Who never shows a bit of temperament?
Who's never wrong but always right?
Who'd never dream of starting a fight?
Who get stuck with all the bad luck?

Marcos Bracco

unread,
May 8, 2018, 1:58:57 PM5/8/18
to cp...@googlegroups.com

Entiendo que para poder hacer algo así tendrías que hacer un overload de 'operator->' non-member, pero  operator-> no pude ser non-member, y por lo tanto no se puede.


Marcos

Juan Manuel Ollé

unread,
May 8, 2018, 2:18:56 PM5/8/18
to cp...@googlegroups.com
Claro, Mientras me mueva por wrappers de objectos concretos puedo irme hacia adentro, pero cuando tengo un raw pointer en la cadena ya no puedo seguir, un ejemplo es un shared_ptr

dgutson .

unread,
May 8, 2018, 2:20:30 PM5/8/18
to cppba
igual tiene All Oracle el diseño...

Carlos Cattaneo

unread,
May 8, 2018, 2:24:10 PM5/8/18
to cp...@googlegroups.com
En vez de:

 w1->f(); // esto no anda

Invocalo así:

 (*w1)->f();

Saludos,
Carlos



Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+un...@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.
--
Who’s got the sweetest disposition?
One guess, that’s who?
Who’d never, ever start an argument?
Who never shows a bit of temperament?
Who's never wrong but always right?
Who'd never dream of starting a fight?
Who get stuck with all the bad luck?

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+un...@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+un...@googlegroups.com.

Carlos Cattaneo

unread,
May 8, 2018, 2:26:00 PM5/8/18
to cp...@googlegroups.com
El problema no es un raw pointer "en la cadena", el problema es "comenzar" con raw porinter.

Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+un...@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.
--
Who’s got the sweetest disposition?
One guess, that’s who?
Who’d never, ever start an argument?
Who never shows a bit of temperament?
Who's never wrong but always right?
Who'd never dream of starting a fight?
Who get stuck with all the bad luck?

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+un...@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+un...@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+un...@googlegroups.com.

Juan Manuel Ollé

unread,
May 8, 2018, 2:50:14 PM5/8/18
to cp...@googlegroups.com
Carlos, 

Si ese W* lo pongo dentro de un shared_ptr el problema esta igual.

Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.
--
Who’s got the sweetest disposition?
One guess, that’s who?
Who’d never, ever start an argument?
Who never shows a bit of temperament?
Who's never wrong but always right?
Who'd never dream of starting a fight?
Who get stuck with all the bad luck?

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe@googlegroups.com.

Juan Manuel Ollé

unread,
May 8, 2018, 2:51:58 PM5/8/18
to cp...@googlegroups.com
Creo que el comentario de Marcos dio en el clavo del asunto

Gracias

Alejandro C

unread,
May 8, 2018, 9:16:42 PM5/8/18
to CyC++ Buenos Aires
O también

w1->operator->()->f();

Reply all
Reply to author
Forward
0 new messages