Tôi có chức năng templated hoạt động trên biến kiểu mẫu và nếu giá trị nhỏ hơn 0, đặt giá trị là 0. Điều này hoạt động tốt, nhưng khi loại templated của tôi là unsigned, tôi nhận được một cảnh báo về cách so sánh luôn luôn là sai. Điều này rõ ràng là có ý nghĩa, nhưng kể từ khi được tạo khuôn mẫu, tôi muốn nó là chung cho tất cả các kiểu dữ liệu (đã ký và chưa ký) và không đưa ra cảnh báo.So sánh luôn sai do phạm vi hạn chế ... với các mẫu
Tôi đang sử dụng g + + trên Linux và tôi đoán có cách để ngăn chặn cảnh báo cụ thể đó thông qua tùy chọn dòng lệnh thành g ++, nhưng tôi vẫn muốn nhận cảnh báo trong các trường hợp khác, không có templated . Tôi tự hỏi nếu có một số cách, trong mã, để ngăn chặn điều này, mà không cần phải viết nhiều phiên bản của chức năng?
template < class T >
T trim(T &val)
{
if (val < 0)
{
val = 0;
}
return (val);
}
int main()
{
char cval = 5;
unsigned char ucval = 5;
cout << "Untrimmed: " << (int)cval;
cval = trim(cval);
cout << " Trimmed: " << (int)cval << endl;
cout << "Untrimmed: " << (int)ucval;
cval = trim(ucval);
cout << " Trimmed: " << (int)ucval << endl;
return (0);
}
+1: Vâng, vâng, đó là một giải pháp cho trường hợp đặc biệt này :) –