Chciałem zrobić taką "sztuczkę" w C++ - przyjąć w konstruktorze klasy/struktury, wartość typu
Spróbowałem zrobić to w ten sposób:
To działa poprawnie(pomijając
T1
, w jakiś sposób "zapamiętać" typ przyjęty przez konstruktor, a następnie w innej funkcji sprawdzić, czy inny podany typ T2
==
T1
.Spróbowałem zrobić to w ten sposób:
struct Foo {
std::size_t type;
template
Foo(T value) : type(typeid(T).hash_code()) {}
``````
template
const bool is_same() {
return typeid(T).hash_code() == type;
}
};
``````
Foo bar(3.14f);
const bool same = bar.is_same();
std::cout << same; // 1
To działa poprawnie(pomijając
const
, bo typeid
ma z tym problem), ale@KrzaQ2: O ile dobrze widzę to będzie działało tylko dla typów z
@5z7k9: Od C++11 jest do tego typeindex, bo sam hashcode() ci nie wystarczy (może się okazać że dwie mają taki sam), ale fakt faktem nie da się tego zainicjalizować jako constexpr czyli
nie zadziała.
Generalnie
static types
? @5z7k9: Od C++11 jest do tego typeindex, bo sam hashcode() ci nie wystarczy (może się okazać że dwie mają taki sam), ale fakt faktem nie da się tego zainicjalizować jako constexpr czyli
constexpr Foo bar(3.14f);
nie zadziała.
Generalnie
typeid(T)
nigdy nie będzie constexpr, nie da się tego tak zaimplementować, no chyba że ograniczasz@5z7k9: do porównywania typów w trakcie kompilacji jest std::is_same. ale żeby z tego sensownie skorzystać musiałbyś prawdopodobnie uczynić z Foo template, a zgaduję że tego nie chcesz.
Nad Morzem Czarnym FORTE też już nie lata z włączonym transponderem.
#ukraina #flightradar24