tôi cố gắng chuyên mẫu nếu một lớp có một chức năng đặc biệt thành viên như thế này (tìm thấy ở đây trong ví dụ khác):mẫu để kiểm tra sự tồn tại của chức năng thành viên quá tải
template <typename T>
class has_begin
{
typedef char one;
typedef long two;
template <typename C> static one test(decltype(&C::AnyFunc)) ;
template <typename C> static two test(...);
public:
enum { value = sizeof(test<T>(0)) == sizeof(char) };
enum { Yes = sizeof(has_begin<T>::test<T>(0)) == 1 };
enum { No = !Yes };
};
này hoạt động tốt cho đến khi AnyFunc
bị quá tải :
class B : public vector<int>
{
public:
void AnyFunc() const;
void AnyFunc();
};
Tôi làm cách nào để viết lại mã thử nghiệm của mình để nhận mẫu "Có" từ mẫu của tôi?
Câu hỏi hay. Một vấn đề rất tầm thường mà có thể đi lặng lẽ không bị phát hiện do SFINAE. – iammilind