Ho una fabbrica che restituisce un puntatore intelligente. Indipendentemente da quale puntatore intelligente utilizzo, non riesco a convincere Google Mock a prendere in giro il metodo factory.Google può simulare un metodo con un tipo di ritorno puntatore intelligente?
L'oggetto fittizio è l'implementazione di un'interfaccia astratta pura in cui tutti i metodi sono virtuali. Ho un prototipo:
MOCK_METHOD0(Create, std::unique_ptr<IMyObjectThing>());
E ottengo:
"...gmock/gmock-spec-builders.h(1314): error C2248: 'std::unique_ptr<_Ty>::unique_ptr' : cannot access private member declared in class 'std::unique_ptr<_Ty>'"
Il tipo indicò nel puntatore intelligente è definito.
E ho capito che sta provando ad accedere a uno dei costruttori dichiarato privato, ma non capisco perché. Quando questo era uno std :: auto_ptr, l'errore diceva che non esisteva un costruttore di copia, il che mi confonde.
In ogni caso, esiste un modo per simulare un metodo che restituisce un puntatore intelligente? O c'è un modo migliore per costruire una fabbrica? La mia unica decisione è di restituire un puntatore raw (blech ...)?
Il mio ambiente è Visual Studio 2010 Ultimate e Windows 7. Non utilizzo la CLI.
Non dovresti aver bisogno di fare cambiamenti nelle interfacce delle tue classi solo per farle lavorare con il tuo framwork beffardo.Spesso questo non è affatto possibile. Questa non è una soluzione accettabile per me! –
Non mi sembra accettabile che una classe factory restituisca un puntatore non elaborato. In questo caso, unique_ptr ha più senso. È stato progettato in parte per risolvere il problema di "assegnare il risultato a un puntatore condiviso su * ogni * sito di chiamate". –
Non penso che questa sia la risposta corretta, cambiando tutto in proprietà raw o condivisa non è una soluzione solo per mettere alla prova le cose! – paulm