2010-07-22 7 views
8

Pazartesiden sorduğum bu soruyu sordum ve hayatım boyunca nasıl cevap vereceğimi bilmiyorum. Bilmediğimden beri, şimdi öğrenmek istiyorum. Merak kediyi öldürüyor. İki tam sayı verildiğinde, derleme zamanında daha az döndürün.Şablon meta programlamasında karşılaştırmadan daha az nasıl yapılır?

template<int M, int N> 
struct SmallerOfMandN{ 
    //and magic happenes here 
}; 

İşaretçiler veya nasıl yapılır? (Boost MPL bu gece okumaya başlamak olacaktır.)

iki sayının asgari denir ve böyle bir şey yapmak mpl gibi dünya ağır kitaplığı gerekmez
+1

kendine * bir kopyasını alın "C++ şablonları - Komple Kılavuzu" * ve belki * "Modern C++ tasarım" * gerçekten konuda başlamak :) –

cevap

17

: Elbette

template <int M, int N> 
struct compile_time_min 
{ 
    static const int smaller = M < N ? M : N; 
}; 

int main() 
{ 
    const int smaller = compile_time_min<10, 5>::smaller; 
} 

eğer o kolayca söyleyebiliriz C++ 0x edildi:

constexpr int compile_time_min(int M, int N) 
{ 
    return M < N ? M : N; 
} 

int main() 
{ 
    constexpr int smaller = compile_time_min(10, 5); 
} 
+0

Bu kadar? Basit bir üçlü operatör? Bunun gibi derleme zamanında çalışabileceği hakkında hiçbir fikrim yoktu. Çok teşekkürler! 6 dak daha beklemek zorundayım. Bu cevabı kabul etmek. – wheaties