Methoden in C ++ 14 können feststellen, ob sie für einen L-Wert oder einen R-Wert aufgerufen werden:
%Vor%Kann ein Programmierer sagen, welchen Typ er erstellt? Kann ich die Konstruktion von L-Werten aus meiner Klasse komplett deaktivieren?
Ich habe eine Proxy-Klasse (mehrere, eigentlich), die immer zu etwas anderem konvertieren sollte. Die Verwendung ohne Konvertierung ist ein Fehler. Ich kann diesen Fehler zur Laufzeit feststellen, z. B. indem ich ein bool used_ = 0;
member #ifndef NDEBUG;
hinzufüge und es in meiner benutzerdefinierten Cast festlege und dann assert(used_)
in% code_% der Proxy-Klasse mache, aber es wäre viel schöner wenn ich zum Compiler kommen könnte, um die Installation von Dtor
Instanzen dieses Proxy an erster Stelle zu verhindern:
Kann ich so etwas mit C ++ 14 machen?
Wir deaktivieren alle öffentlichen Schlüssel (einschließlich Kopieren / Verschieben), sodass niemand temporary_only
außer über temporary_only::make
(ein rvalue) erstellen kann.
Beachten Sie, dass
%Vor%funktioniert immer noch. Hier haben wir einen rvalue, der an einen rvalue-Bezug gebunden ist, und dieser rvalue-Bezug ist selbst ein lvalue mit einer mehrzeiligen Lebensdauer (scope lifetime). Dies kann nicht gestoppt werden.