Ich schreibe gerade eine Interface-Klasse, die Zugriff auf interne Elemente einer komplexen Struktur als const- oder non-const-Referenzen ermöglichen soll. Die Idee ist, dass einigen Modulen Const-Zugriff gewährt wird und einigen Modulen Vollzugriff gewährt wird.Hinzufügen eines Const-Qualifikationsmerkmals zu einer Elementfunktion
Ich habe 'type_traits' 'std :: add_const' verwendet, um den Rückgabetyp der internen Memberfunktionen bedingt zu qualifizieren, leider kann ich mir keine Möglichkeit vorstellen, die Memberfunktionen bedingt als const oder non-const zu qualifizieren.
Ist das überhaupt möglich? Wenn das so ist, wie?
z.B:
template< typename T, bool isConst >
struct apply_const
{
typedef T type;
};
template<typename T>
struct apply_const<T, true>
{
typedef typename std::add_const<T>::type type;
};
template< bool isConst >
const Interface
{
/// @brief get the TypeA member
typename apply_const<TypeA, isConst >::type& GetXpo3Container() // how do I conditionally add a const qualifier
{
return config_.type_a_member_;
}
typename apply_const<Profile, isConst >::type& GetProfile(unint32_t id) // qualifier ???
{
return config_.profiles.get(id);
}
// .... lots more access functions
ConfigType config_; // the config
};
Hinweis: der eigentliche Grund für die Trennung/Erstellen von 2 Versionen der Schnittstelle ist, dass sie den Zugriff auf verschiedene Instanzen von config
Bereitstellung wird - eine, die beschreibbar und eines ist, das nicht der Fall ist. Das Subsystem, das entwickelt wird, ist ein eingebetteter Netconf Agent, der <running>
und <candidate>
Konfigurationen unterstützt.
Verwenden Sie zwei Überladungen (eine Konstante und eine Nicht-Konstante), und verwenden Sie SFINAE, um jeweils nur eine davon zu aktivieren. – ildjarn
2 Überladungen speichern tatsächlich nichts (wie unten angegeben).Das Ziel ist es, 2 Versionen von 'Schnittstelle' zur Verfügung zu stellen, wobei hier alle Mitgliedsfunktionen 'const' Referenzen zurückgeben und eine, wo alle Mitgliedsfunktionen nicht konstante Referenzen zurückgeben. Die Konstanz des Rückgabetyps ist kein Problem, sondern nur die Qualifizierung der Memberfunktion. Ich schätze, ich werde nur mit keiner Qualifikation für die Mitgliederfunktionen auskommen müssen, was kein allzu großes Problem darstellt. – mark