Giriş
C++11 ile geliyor. Şöyle kullanırız. std::enable_if_t ile kardeştir.
Şöyle yaparız.
Örnek
Şöyle yaparız.
C++11 ile geliyor. Şöyle kullanırız. std::enable_if_t ile kardeştir.
typename std::enable_if<...>::type
Kodu Etkinleştirmek İçin - PredicateŞöyle yaparız.
template<typename T>
typename std::enable_if<std::is_same<T, float>::value ||
std::is_same<T, double>::value >::type
Function(const T*in, T*out)
{
Func3(in, out);
}
Şöyle yaparız.template <typename T,
typename std::enable_if <std::is_same<T, int >::value ||
std::is_same<T, float >::value ||
std::is_same<T, const char *>::value>::type* = nullptr>
void test(T i)
{
//process data
}
TypeÖrnek
Şöyle yaparız.
template<typename T> struct identity { using type = T; };
template<std::size_t N>
using bit_type = typename
std::conditional_t<N == std::size_t{ 8 }, identity<std::uint8_t>,
std::conditional_t<N == std::size_t{ 16 }, identity<std::uint16_t>,
std::conditional_t<N == std::size_t{ 32 }, identity<std::uint32_t>,
std::enable_if<N == std::size_t{ 64 }, std::uint64_t>>>>::type;
Kullanmak için şöyle yaparız. Eğer 64'ten farklı bir sayı verirsek std::enable_if<false, uint64_t> elde ederiz ve bu da derlenmez.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
Hiç yorum yok:
Yorum Gönder