bạn sẽ sử dụng cách so sánh thông số mẫu không loại trong một std::enable_if
như thế nào? Tôi không thể tìm ra cách để làm điều này một lần nữa. (Tôi đã từng làm việc này, nhưng tôi đã bị mất mã vì vậy tôi không thể nhìn lại nó, và tôi không thể tìm thấy bài viết tôi tìm thấy câu trả lời trong cả hai.)std :: enable_if Với thông số mẫu không phải loại
Cảm ơn bạn đã giúp đỡ về chủ đề này.
template<int Width, int Height, typename T>
class Matrix{
static
typename std::enable_if<Width == Height, Matrix<Width, Height, T>>::type
Identity(){
Matrix ret;
for (int y = 0; y < Width; y++){
elements[y][y] = T(1);
}
return ret;
}
}
Edit: Cố định khung thiếu như đã chỉ ra trong ý kiến.
Tôi có thể sử dụng 'static_assert' cho điều đó. Nó cung cấp thông báo lỗi rõ ràng. – chris
'static_assert' thực sự là công cụ phù hợp:' std :: enable_if' là dành cho SFINAE và không có SFINAE có thể cho thành viên không phải mẫu của mẫu lớp. –
Tôi đã nghĩ đến việc sử dụng 'static_assert', cuối cùng tôi có thể sử dụng nó. Nhưng tôi đã làm điều này trước khi làm việc, và với lợi thế của tự động hoàn thành thậm chí không liệt kê các chức năng cho ma trận không vuông ở nơi đầu tiên. Mặc dù vậy, tại thời điểm này, tôi đang cố gắng tìm ra cách mà tôi đã thực hiện điều này với đúng 'std :: enable_if'. – LostOfThought