2016-04-08 5 views
1

mein erstes Mal eine Frage, so die Daumen drücken.kann ich explizit spezialisieren std: shared_ptr :: operator ->

Ich mag eine Spezialisierung schaffen Shared_ptr :: operator-> Im folgenden wird nicht kompilieren auf gcc 4.8.3

template<> 
widget* std::shared_ptr<widget>::operator->() const 
{ 
    return nullptr; 
} 

erhalte ich die folgenden Compiler-Fehler Fehler: keine Memberfunktion ‚operator- > 'in' std :: shared_ptr 'deklariert

Ich habe ein paar Variationen versucht, wie dies zu spezialisieren und ich bekomme immer den gleichen Fehler. B. es in einen Namespace std-Bereich zu verpacken, hat auch versucht, nachfolgende reutrn-Typen abzufahren, was es noexcept usw. macht.

+1

Warum möchten Sie das tun? – NathanOliver

+0

Ah, keine Probs, ich versuche, einige Vor-und Nachbedingungen mit intelligenten Zeigern zu schreiben. Ich kann sie mit einem handgeschriebenen intelligenten Zeiger, den ich selbst geschrieben habe, leicht genug arbeiten lassen, aber ich wollte sehen, ob ich einige der vorgebildeten verwenden könnte, z. STL oder Boost. – PMcK

+0

Vielleicht werfen Sie einen Blick auf diese andere Frage: http://stackoverflow.com/questions/15876325/how-can-i-create-a-smart-pointer-that-locks-and-unlocks-a-mutex – Rerito

Antwort

3

Nein, Sie können keine Elementfunktionen von Typen innerhalb von std spezialisieren. Dies macht Ihr Programm schlecht geformt (und ich glaube, dass keine Diagnose erforderlich ist). Selbst wenn es "funktioniert", ist es illegal.

Sie können den gesamten Typ für einen vom Benutzer bereitgestellten Typ spezialisieren, aber das beinhaltet grundsätzlich das Neuschreiben von std::shared_ptr von Grund auf neu.

+1

http://eel.is/c++draft/constraints#namespace.std-2 –

Verwandte Themen