C SFİNAE örnekler?
Daha fazla şablon meta-programlama içine almak istiyorum. Bu SFİNAE "ikame bir hata değildir." demektir biliyorum Ama biri bana SFİNAE için iyi bir kullanım gösterebilir?
CEVAP
SFINAE
boolean durumunu kontrol etmek için kullanmayı seviyorum.
template<int I> void div(char(*)[I % 2 == 0] = 0) {
/* this is taken when I is even */
}
template<int I> void div(char(*)[I % 2 == 1] = 0) {
/* this is taken when I is odd */
}
Oldukça kullanışlı olabilir. Örneğin, başlatıcı liste operatör virgül kullanarak toplanan sabit bir boyutu daha uzun olup olmadığını kontrol etmek için kullandım
template<int N>
struct Vector {
template<int M>
Vector(MyInitList<M> const& i, char(*)[M <= N] = 0) { /* ... */ }
}
Liste sadece M başlatıcı listesi de pek çok unsur vardır ki, N, daha küçük olduğunda kabul edilir.
char(*)[C]
sözdizimi anlamı: eleman türü char ve boyutu ile bir dizi için İşaretçi C
. Eğer C
yanlış (0) ise, char(*)[0]
sıfır boyutlu dizi için işaretçi geçersiz adamı sonra: SFİNAE şablon sonra. göz ardı edilecektir.
Bu gibi görünüyor boost::enable_if
ile dile getirdi
template<int N>
struct Vector {
template<int M>
Vector(MyInitList<M> const& i,
typename enable_if_c<(M <= N)>::type* = 0) { /* ... */ }
}
Uygulamada, sık sık durumunu kontrol etmek için yeteneği yararlı bir yetenek bulmak.
Sabit XML ayrıştırma ve düzenli HTML i...
/Functor/Uygulamalı/Monad bir Functor ...
Nedir &; gevşek bağlantı?"&"örnekler v...
&Quot;genişletme" seçeneği grunt-...
Hızlandırmak Julia'In kötü yazılm...