Tôi có một mẫu mà tôi muốn biên dịch có điều kiện tùy thuộc vào loại đối số. Tôi chỉ quan tâm đến sự khác biệt giữa "Dữ liệu cũ thuần túy" (POD), tức là, số nguyên, v.v. hoặc các lớp/cấu trúc. Tôi đang sử dụng c + + VS2008 trên Windows.Biên dịch có điều kiện bằng cách sử dụng các đặc tính kiểu tăng cường
template<T>
class foo
{
void bar(T do_something){
#if IS_POD<T>
do something for simple types
#else
do something for classes/structs
#endif
}}
Tôi đã xem xét thư viện tăng cường và tôi có thể thấy rằng chúng dường như có những gì tôi muốn. Tuy nhiên, tôi không hiểu cú pháp chính xác cho câu lệnh #if
là gì.
Mọi trợ giúp sẽ được đánh giá cao.
Chỉnh sửa --- Sau khi đọc câu trả lời, tôi thấy tôi đã bỏ qua điều gì đó trong định nghĩa của câu hỏi. Lớp foo
là một lớp templated mà chỉ cần ví dụ phiên bản của bar
đó là chính xác cho class type T
. Tôi đã tìm kiếm một giải pháp có thể được giải quyết một thời gian biên dịch. Hy vọng điều này sẽ làm sáng tỏ vấn đề của tôi.
Đây sẽ là lỗi biên dịch, khi mẫu lớp được khởi tạo, 'T' được cố định và tại thời điểm đó khi bạn cố gắng gọi' bar', nó sẽ thấy hai định nghĩa và không biên dịch được một trong số chúng. Lưu ý rằng đây không phải là SFINAE, vì nó sẽ không phải là một sự thay thế thất bại - loại được cố định trước khi diễn giải của thành viên (hoặc vì vậy tôi nghĩ rằng, tôi không bao giờ chắc chắn với những điều này :)). –