Tôi đang cố tìm một giải pháp để có các hằng số số liên tục bên trong phương thức lớp mẫu. Tôi đang thực hiện một số lớp mẫu toán học được sử dụng với các loại float hoặc double. Vấn đề là các literals khác nhau tùy thuộc vào kiểu dữ liệu (ví dụ "0.5f" cho float và "0.5" cho double). Cho đến nay, tôi đưa ra hai giải pháp. Một số mã giả thuyết cho mã đầu tiên:Chức năng chuyên môn trong lớp mẫu cho các ký tự float và double
template <typename T>
class SomeClass
{
public:
T doSomething(T x);
};
template <>
float SomeClass<float>::doSomething(float x)
{
float y = 0.5f;
/*
* Do computations...
*/
return x;
}
template <>
double SomeClass<double>::doSomething(double x)
{
double y = 0.5;
/*
* Do computations...
*/
return x;
}
Phương pháp trên ghi đè toàn bộ phương pháp cho mọi loại được sử dụng.
cách tiếp cận khác:
template <typename T>
class SomeClass
{
public:
T doSomething(T x);
private:
T getValue();
};
template <typename T>
T SomeClass<T>::doSomething(T x)
{
T y = getValue();
/*
* Do computations...
*/
return x;
}
template <>
float SomeClass<float>::getValue()
{
return 0.5f;
}
template <>
double SomeClass<double>::getValue()
{
return 0.5;
}
Cái này không đòi hỏi phải viết cùng phương pháp nhiều lần cho loại hình cụ thể, nhưng đòi hỏi phải có nhiều getValue() phương pháp cho mỗi "con số kỳ diệu" mà cần phải được được sử dụng bên trong phương thức.
Có cách nào khác, "thanh lịch hơn" để giải quyết vấn đề này không?
Nếu chỉ về chữ, tôi nghĩ bạn có thể sử dụng đúc static_cast() –
Mohammad
Tôi đã không đề cập đến nó trong câu hỏi của mình, nhưng tôi muốn tránh mọi chuyển đổi, không rõ ràng hoặc ngầm. – umebe