Cho một khai báo lớpCó thể sử dụng std :: enable_if để chọn chuyên môn về mẫu thành viên không?
class A {
template <typename T> T foo();
};
Tôi muốn chuyên A::foo
với nhiều loại hình (int
, ...) và các lớp học kiểu (POD, không POD) của T
. Thật không may, tôi dường như không thể sử dụng std::enable_if
cho mục đích sau. Sau đây không biên dịch:
template <> int A::foo<int>(); // OK
template <typename T>
typename std::enable_if<is_pod<T>::value, T>::type foo(); // <<<< NOT OK!
template <typename T>
typename std::enable_if<!is_pod<T>::value, T>::type foo(); // <<<< NOT OK!
Vấn đề này có lẽ là do sự std::enable_if<...>
thứ là một phần của chữ ký chức năng, và rằng tôi đã không công bố bất kỳ thành viên đó bên A
. Vì vậy, làm thế nào tôi có thể chuyên một thành viên mẫu dựa trên các đặc điểm kiểu?
Nhưng bạn không thể quá tải trên kiểu trả về ... –
@Daniel Gehriger 'enable_if' đã được thực hiện cho các chức năng loại bỏ có điều kiện từ độ phân giải quá tải, vì vậy khá nhiều cho trường hợp này chính xác. – nijansen
Có, nhưng tôi vẫn có 'A :: foo()' (và nhiều chuyên môn khác cho một số loại cụ thể) sẽ xung đột với bất kỳ điều gì đã được chọn bởi 'enable_if'. –