2016-12-15 42 views
6

tarafından çağrılıp çağrılmadığını saptama Kümelerimden birinin derleme zamanı bilinen değeriyle çağrıldığını kontrol etmeyi seviyorum. Onu tespit etmenin bir yolu var mı?SFINAE: Bir işlevin derleme zamanı bilinen değeri

Öyleyse, birileri bu çağırdığınızda: 10 beri

A a (10); 

sabit bilinen bir derleme zamanı, ben böyle özel bir ctor diyoruz:

template<int Value, typename = std::enable_if_t<Value <= 100>> 
A (int Value) {} 

i çözebilir konusunda bir fikrin bu konu? Teşekkürler! Bu gibi kullanabilirsiniz, Sonra

struct A { 
    template<int v, std::enable_if_t<(v <= 100)>* = nullptr> 
    A(std::integral_constant<int, v>) {} 
}; 

:

cevap

4

İntegral sabiti sorununuzu çözebilir

A a{std:integral_constant<int, 7>{}}; 

kullanım kolaylığı için, ayrıca benzer bir şey kullanabilirsiniz ne boost::hana yapar. ne yazık ki değil,

A a{76_c}; // the ""_c operator outputs an std::integral_constant<int, 76> 

Sen fikir için boost::hana documentation

+0

ShiftPDA bu operatör hakkında daha fazla bilgi bulunabilir: Bir ayrılmaz sabiti haline numarası dönüştürülemedi bir hazır operatörü tanımlar. Libremde gerçekten önemli bir nokta, basit ilkel türler olarak kullanımı kolay olması gerektiğidir. C++ programcılarının% 99'u, integral_constant'ı bile bilmiyor. – Melkon

+4

Bu aslında çok güzel bir çözüm, +1, ve C++ programcılarının% 99'u geri kalanı 'integral_constant' hakkında bilgi sahibi olmalıydı :) İstediğin buysa, kesinlikle bu rotaya gideyim, eğer derhal bazı sabitlerin değerlerini test edersem zaman. – vsoftco

+0

@vsoftco Bu bağlamda: ilkel türlere dayanarak (veya diğer türdeki kontrolleri) asılların yerini alacak ve bunları tip bilgisine koyacak bir değişmez lib üzerinde çalışıyorum. Amaç ilkel türler kadar basit olmak, ancak daha güzel ve daha verimli kodlar üretmektir. Bu integral_constant sürümü güzel bir eklentidir, ancak amacım, kullanıcıların bunları düşünmek zorunda kalmadan sessizce uzaklaştırmalarını sağlamaktır. Elbette, bazıları integral_constant'ı kullanacak, ama çoğu değil, ve dürüstçe, eğer kullanmaları gerekiyorsa, kod daha güzel olmayacak, başarmak istediğim bir şey. – Melkon