2010-07-22 35 views
8

Tôi đã hỏi câu hỏi này vào thứ hai và cho cuộc sống của tôi Tôi không biết phải trả lời như thế nào. Vì tôi không biết, bây giờ tôi muốn tìm hiểu rất nhiều. Sự tò mò đang giết chết con mèo này. Cho hai số nguyên, trả về số thấp hơn tại thời gian biên dịch.Làm thế nào để thực hiện một ít hơn so với mẫu meta-lập trình?

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

Có con trỏ hoặc cách thực hiện? (Sẽ bắt đầu đọc Boost MPL tối nay.)

+1

có được cho mình một bản sao của * "++ Templates C - The Guide Complete" * và có thể * "Modern C++ thiết kế" * để thực sự bắt đầu về đề tài này :) –

Trả lời

17

Đó được gọi là tối thiểu là hai con số, và bạn không cần thư viện nặng thế giới như mpl để làm một điều như vậy:

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; 
} 

Tất nhiên nếu nó được C++ 0x bạn có thể dễ dàng nói:

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

Đó là nó? Một toán tử ternary đơn giản? Tôi không có ý tưởng nó có thể làm việc trong thời gian biên dịch như thế. Cảm ơn nhiều! Tôi phải đợi thêm 6 phút nữa. để chấp nhận câu trả lời này. – wheaties

Các vấn đề liên quan