đơn giản, giải pháp chung nhất: Chỉ cần viết một tình trạng quá tải đồng bằng cũ của hàm:
ostream& operator << (ostream &out,Vector<int>& vec)
{
// Your int-specific implementation goes here
}
này giả định rằng các int
và phi int
phiên bản don' t có nhiều mã chung, vì bạn phải viết hai triển khai riêng biệt.
NẾU bạn muốn sử dụng một thực hiện chung của chức năng, chỉ với một tuyên bố if
bên trong khác, sử dụng thực hiện Charles Bailey:
template< class T >
struct TypeIsInt
{
static const bool value = false;
};
template<>
struct TypeIsInt<int>
{
static const bool value = true;
};
template <typename T>
ostream& operator << (ostream &out,Vector<T>& vec)
{
if (TypeIsInt<T>::value) {
// your int-specific code here
}
}
Nói chung, không sử dụng typeid
nếu bạn không cần để.
Chỉ cần để bạn biết, có khá nhiều sự đồng thuận rằng bạn đã chấp nhận câu trả lời sai. Có thể muốn unaccept nó và chọn một số khác. :) – jalf
Cảm ơn mọi thông tin bạn đã nhập! Ban đầu tôi chấp nhận câu trả lời typeid bởi vì chuyên môn có vẻ như quá mức cần thiết cho chức năng đơn giản mà tôi đã viết, nhưng sau này tôi đã làm cho chức năng phức tạp hơn một chút vì vậy tôi đã chọn chuyên môn. – Meir