[gelöst] Benutzung von temporäre Variablen verhindern
-
Hallo,
gibt es eine Möglichkeit, Funktionsaufrufe über temporäre Variablen zu verhindern? Ich habe dieses Konstrukt:
class scoped_access { int const& Value_; public: scoped_access( int const& value ) : Value_( value ) { } int const& value() const { return Value_; } }; class test { int Value_; public: test( int value ) : Value_( value ) { } [[nodiscard]] scoped_access lock_value() const { return scoped_access( Value_ ); } }; int main() { test t( 5 ); // Zugriff nur über scoped_access erlauben... // ...so soll die Benutzung aussehen scoped_access const sa = t.lock_value(); int const& v1 = sa.value(); // ... und das soll nicht übersetzen int const& v2 = t.lock_value().value(); }
Hat jemand eine Idee?
-
Ich glaube ref-qualifier könnten dein Problem lösen:
class scoped_access { int const& Value_; public: scoped_access(int const& value) : Value_(value) { } int const& value() const & { return Value_; } int const& value() const&& = delete; }; class test { int Value_; public: test(int value) : Value_(value) { } [[nodiscard]] scoped_access lock_value() const { return scoped_access(Value_); } }; int main() { test t(5); // Zugriff nur über scoped_access erlauben... // ...so soll die Benutzung aussehen scoped_access const sa = t.lock_value(); int const& v1 = sa.value(); // ... und das soll nicht übersetzen int const& v2 = t.lock_value().value(); }
-
Top! Funktioniert.
-
Edit: Hey cool, die Ref-Qualifier muss ich mir dann doch nochmal genauer ansehen. Meine ursprünglich Antwort war so doch nicht ganz korrekt