Zugriff auf static const struct Member eines struct Members ohne Instanz
-
Hi,
ich denk der Titel ist ein wenig verwirrend. Also gleich mal das Beispiel:
template<typename SizeType, SizeType min, SizeType max> struct Opaque { typedef SizeType size_t; static const size_t MIN = min; static const size_t MAX = max; std::vector<std::uint8_t> data; }; template<std::uint8_t exp> struct power_two { static const std::size_t value = 1 << exp; }; struct TLSPlaintext { ContentType contentType; ProtocolVersion version; Opaque<std::uint16_t, 0, power_two<14>::value> data; };
Ich hab jetzt diese beiden structs 'TLSPlaintext' und 'Opaque'.
Nun moechte ich von TLSPlaintext auf data::MAX zugreifen ohne das ich eine Instanz davon erstelle.std::cout << TLSPlaintext::data::MAX << "\n"; // So moechte ich drauf zugreifen, geht nicht std::cout << TLSPlaintext().data.MAX << "\n"; // So gehts...
Gibt es da ueberhaupt eine Moeglichkeit?
Gruessle
-
decltype(TLSPlaintext::data)::MAX
-
ungetstet:
struct TLSPlaintext { ContentType contentType; ProtocolVersion version; typedef Opaque<std::uint16_t, 0, power_two<14>::value> OT; OT data; }; std::cout << TLSPlaintext::OT::MAX << "\n";
-
camper schrieb:
decltype(TLSPlaintext::data)::MAX
Omfg das hatte ich auch schon. Leider hat mir Visual Studio 2013 das 'decltype' rot unterringeld und gesagt: "Error: type name is not allowed". Dadurch hab ich garnicht probiert ob sich das ueberhaupt bauen laesst und habs wieder verworfen. Aber es funktioniert wunderbar:
std::cout << sizeof(decltype(tunnel::tls::TLSPlaintext::data)::size_t) << "\n"; std::cout << decltype(tunnel::tls::TLSPlaintext::data)::MIN << "\n"; std::cout << decltype(tunnel::tls::TLSPlaintext::data)::MAX << "\n"; /* 2 0 16384 */
Leider sagt mir VS bei jedem decltype & ::[..] das das falsch ist....
Aber Danke vielmals.