Tôi có một chức năng mẫu và muốn đảm bảo tại thời gian biên dịch mà nó không được khởi tạo trên một loại phụ hoặc siêu kiểu của một lớp cụ thể.Làm cách nào để tạo một xác nhận thời gian biên dịch cho một mẫu có các loại cụ thể?
Làm cách nào tôi có thể gây ra lỗi trình biên dịch C++ nếu điều này bị vi phạm?
class base {
};
class derived : public base {
};
class lowest : public derived {
};
template <typename T>
bool isCorrect(const T& obj) {
typedef foo<T> D;
foo<T> *def = foo<T>::find();
return (def && def->getAnswer(object));
}
Tôi muốn isCorrect
chỉ có sẵn cho lớp derived
, nhưng không base
hoặc lowest
. Lưu ý có thể có nhiều lớp thấp nhất khác và một chuỗi các lớp cơ sở cần loại trừ cũng như các lớp dẫn xuất thay thế được chấp nhận.
Có cách nào trong C++ để giới hạn mẫu chỉ áp dụng cho các lớp dẫn xuất mà tôi chỉ định rõ ràng không?
thể trùng lặp của [Mẫu ràng buộc C++] (http://stackoverflow.com/questions/122316/template-constraints-c) –
Cụ thể, điều này có thể hữu ích: http://www.boost.org/doc/libs/1_48_0/libs/concept_check/concept_check.htm –
Tại sao bạn không viết quá tải? – GManNickG