TGViewer
C++: Хроники Дурки🚑 C++: Хроники Дурки🚑 @cpp_durka · 916 subscribers
Post #42 1.23K
Я знаю много разных веселых реализаций TypeId - когда тебе надо по типу получить уникальный числовой идентефикатор.

Да что там, сам выступал с докладом, как такое сделать, и как мы это применили.

Но тут я нашел на еще одну реализацию, очень даже изящную (да, ты должен написать в комментарии, что Abseil это вообще-то классика жанра, а идея так вообще общеизвестна, и стыдно мне такое не знать)

Центральная идея проста. Пусть у нас есть вот такой класс:


namespace base_internal {
template <typename Type>
struct FastTypeTag {
static constexpr char kDummyVar = 0;
};
}


У нас есть шаблонный класс, в нем есть шаблонная константа. Для каждого типа Т, он объявит свою константу. Да, все константы будут равны нулю, но у каждой из них будет свой уникальный адрес (!)

А дальше дело техники - мы просто используем адрес в качестве идентефикатора.


template <typename Type>
constexpr FastTypeIdType FastTypeId() {
return FastTypeIdType(&base_internal::FastTypeTag<Type>::kDummyVar);
}


Это очень просто и изящно!

Ну и как многие другие способы получения Id типа - этот ломается в случае динамических библиотек. В каждой dll будет свой адрес константы и Id между разными dll будут расходиться.

Но идею я записал.
GitHub abseil-cpp/absl/base/fast_type_id.h at 62701e8e96a8f850a32c14f1ede54a6d4fc57caf · abseil/abseil-cpp Abseil Common Libraries (C++). Contribute to abseil/abseil-cpp development by creating an account on GitHub.
  • 🔥 17
  • ❤ 4
  • 💅 4
More from @cpp_durka
  1. Sep 8, 2026Мошенники заставили пенсионерку из Москвы переписать квартиру на Rust
  2. Aug 31, 2026Всяко разное болезненное есть в С++, из всего болезненного одно из самых болезненных - это…
  3. Aug 24, 2026Если кто не знаком с библиотекой nlohmann/json - она прекрасна. Мои мысли о том, как должн…
  4. Aug 21, 2026#толькосвоимемы Код взят тут. if (dim == 0) idx_dim = i0; else if (dim == 1) idx_dim = i1;…
  5. Aug 17, 2026Ладно, искать баги в компиляторах весело, но недостаточно. Давайте поиграемся в чуть более…
  6. Aug 10, 2026Ладно, разумеется прошлый пост был набросом. Никогда не обновляйте компиляторы без очень с…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →