Metaprogramming | basic implementation of std::is_integral

std::is_integral metaprogramming sırasında verinin bir türe ait olup olmadığına ilişkin kısıtlama yapılmak istendiğinde kullanılan bir araçtır.


Yukarıdaki 26 satırdaki ifadeden dolayı aşağıdaki gibi compile sürecinde static_assert hatasına neden olacaktır.


Bu satırı kaldırırsanız aşağıdaki gibi bir çıktı göreceksiniz.


Şimdi is_integral sınıfının temel olarak nasıl yazıldığını öğrenmek istersek aşağıdaki gibi bir implementasyon mümkündür.


Burada asıl kritik nokta is_integral_base sınıfı üzerinden olmaktadır. is_integral_base sınıfının integral veri türleri için template specialization yapılmakta ve bu sınıflar true_type türünden türetilmektedir.
Diğer her tür ise false_type türünden türetilmiştir. Bu sayede örneğin is_integral<bool> için is_integral_base<bool> için std::true_type türünden türetildiği için value değeri true dönecektir.


Yukarıda ise false_type/true_type türlerinin basit bir bildirimi görülmektedir. Beklenildiği gibi sınıfların üye elemanlarından biri value türüdür. Ve false_type için bu false, true_type için bu true olarak atama yapılmıştır.