std::is_constructible
İmzası şöyle. Variadic'tir. is_copy_constructible ve is_move_constructible ise variadic değildir.
Elimizde şöyle bir kod olsun.
Destructor private olduğu için is_constructible false döner
Açıklaması şöyle.
Şöyle yaparız.
İmzası şöyle. Variadic'tir. is_copy_constructible ve is_move_constructible ise variadic değildir.
template <class T, class... Args> struct is_constructible;
Verilen parametreleri kullanarak sınıfın kurulup kurulamayacağını döner. Yani şu kodu yazıp yazamayacağımızı döner.T obj();
Örnek - T tipi tam tanımlı olmalıElimizde şöyle bir kod olsun.
#include <iostream>
class A;
int main()
{
std::cout << std::is_constructible<A>::value << std::endl;
}
Bu kod tanımsız davranışa sebep olur. Açıklaması şöyle.Örnek - Destructor erişilebilir olmalıT and all types in the template parameter pack Args shall be complete types, cv void, or arrays of unknown bound.
Destructor private olduğu için is_constructible false döner
#include <type_traits>
class Foo
{
public:
Foo() {}
private:
// Destructor is private!
~Foo(){}
};
int main()
{
if(!std::is_constructible<Foo>::value)
{
std::cout << "is_constructible failed" << std::endl;
}
}
std::is_default_constructibleAçıklaması şöyle.
Bu metod aslında alttaT shall be a complete type, (possibly cv-qualified) void, or an array of unknown bound. Otherwise, the behavior is undefined.
T obj();
tipi için std::is_constructible çağrısını kullanıyor.Şöyle yaparız.
struct X { }; // OK
static_assert(std::is_default_constructible<X>::value, "Error");
Eğer T tipi tam değilse false döner. Örneğin aynı kodu X yapısı içine taşıyalım. Şöyle yaparız.struct X {
static_assert(std::is_default_constructible<X>::value, "Error"); // Fails
};
std::is_move_constructible
move constructible traits yazısına taşıdım.
std::is_nothrow_constructible
Verilen parametreleri kullanarak sınıfın kurulup kurulamayacağını döner. Variadic'tir. is_copy_constructible ve is_move_constructible ise variadic değildir.
Örnek ver
std::is_trivially_constructible
Verilen parametreleri kullanarak sınıfın kurulup kurulamayacağını döner. Variadic'tir. is_copy_constructible ve is_move_constructible ise variadic değildir.
Örnek ver
std::is_nothrow_constructible
Verilen parametreleri kullanarak sınıfın kurulup kurulamayacağını döner. Variadic'tir. is_copy_constructible ve is_move_constructible ise variadic değildir.
std::is_trivially_constructible
Verilen parametreleri kullanarak sınıfın kurulup kurulamayacağını döner. Variadic'tir. is_copy_constructible ve is_move_constructible ise variadic değildir.
Hiç yorum yok:
Yorum Gönder