6 Ekim 2020 Salı

std::type_identity

Giriş
C++20 ile geliyor. std::type_identity aslında bir struct. Bu struct ile type bilgisi kod içinde rahatça dolaştırılabilir.

Örnek
Şöyle yaparız. int ile çağrılan birinci kod type alan type_of metodunu tetikler. int{} yani değişken ile çağrılan ikinci kod, değişken alan birinci type_of() metodunu tetikler.
template<auto VAR> //Değişken
constexpr auto type_of() {
    return std::type_identity<decltype(VAR)>{};
}

template<typename T> //Type
constexpr auto type_of() {
    return std::type_identity<T>{};
}

template<typename T, typename... Args>
auto create(std::type_identity<T>, Args&&... args) {
  return T{std::forward<Args>(args)...};
}

auto i1 = create(type_of<int>(), 7); //Type
auto i2 = create(type_of<int{}>(), 7); //Değişken

Hiç yorum yok:

Yorum Gönder