9 Temmuz 2020 Perşembe

std::conditional_t - Template Parametreye Göre Farklı Değişken Tipleri Seçmek İçindir

Giriş
Template kodlarda kullanılır.

Örnek
Şöyle yaparız. Template parametresi float ise, T2 float olur. double ise optix::double olur
#include <type_traits>  // std::conditional, std::is_same

template <class T>
class MyClass
{
    using T2 = typename std::conditional<std::is_same<T, float>::value,
                                          optix::float2, optix::double2>::type;
    T2 my_T2_variable;

    // ... other code
};
Örnek
Elimizde şöyle bir kod olsun. Template parametresine göre bit_type std::uint8 veya daha büyük bir şey olur
template<std::size_t N>
using bit_type =
  std::conditional_t<N == std::size_t{  8 }, std::uint8_t,
  std::conditional_t<N == std::size_t{ 16 }, std::uint16_t,
  std::conditional_t<N == std::size_t{ 32 }, std::uint32_t, 
  std::conditional_t<N == std::size_t{ 64 }, std::uint64_t, void>>>>;
Şöyle yaparız.
bit_type<8u> a;  // == std::uint8_t
bit_type<16u> b; // == std::uint16_t
bit_type<32u> c; // == std::uint32_t
bit_type<64u> d; // == std::uint64_t
Örnek
Elimizde şöyle bir kod olsun.
template<int N, int M>
struct commondivs {                                              
  static const int val = ...
};
val alanına değer atamak için şöyle yaparız.
static const int val = std::conditional_t<N < M, foo<N,(M-N)>, bar<(N-M),M>>::val;

Hiç yorum yok:

Yorum Gönder