Tôi dường như không thể tìm ra giải pháp tốt để sử dụng SFINAE với các lớp mẫu có định dạng variadic.SFINAE với các lớp mẫu variadic?
Hãy nói rằng tôi có một mẫu đối tượng variadic mà không thích tham khảo:
template<typename... Args>
class NoRef
{
//if any of Args... is a reference, this class will break
//for example:
std::tuple<std::unique_ptr<Args>...> uptrs;
};
Và một lớp mà thuận tiện kiểm tra nếu một gói luận chứa tài liệu tham khảo:
template<typename T, typename... Other>
struct RefCheck
{
static const bool value = std::is_reference<T>::value || RefCheck<Other...>::value;
};
template<typename T>
struct RefCheck<T>
{
static const bool value = std::is_reference<T>::value;
};
Làm thế nào để sử dụng điều này để chuyên NoRef cho trường hợp tài liệu tham khảo có mặt trong gói arg?
+1. Nhưng tôi nghĩ rằng 'template struct NoRef: NoRef_ :: giá trị, Args ...> {};' sẽ tốt hơn. Bây giờ 'NoRef' là một mẫu lớp khác mà không có tham số mẫu không kiểu (tức là giá trị boolean). –
Nawaz
Tôi thích giải pháp này, mặc dù tôi không thể tạo mẫu bí danh trong MSVC. Nhưng Nawaz cũng cung cấp một giải pháp cho điều đó. –