Tôi muốn quá tải operator<<
cho các mảng tùy ý, sao cho mã cout << my_arr
sẽ hoạt động. Trước tiên, tôi đã cố gắng quá tải thông số thứ hai của operator<<
trên const T (&arr)[N]
, trong đó T
và N
là thông số mẫu. Nhưng kiểm tra mã cho thấy một tác dụng phụ: const char[]
cũng phù hợp với đặc tả loại, và xung đột quá tải mới với một trong những quy định trong lớp dòng. Mã ví dụ:Toán tử quá tải << đối với mảng
#include <cstddef>
#include <iostream>
template<typename T, std::size_t N>
std::ostream& operator<<(std::ostream& os, const T (&arr)[N])
{
/* do stuff */
return os;
}
int main()
{
std::cout << "noooo\n"; /* Fails: ambiguous overload */
}
Nhà điều hành in mảng này vẫn có thể được triển khai?
Tôi không nghĩ rằng N sẽ chuyển giao tốt trong nhiều trường hợp. 'void f (int arr [], size_t N) {cout << arr; } ' –
nếu bạn muốn có thư viện bên ngoài tại sao không chỉ sử dụng http://www.boost.org/doc/libs/1_48_0/doc/html/boost_lexical_cast.html – pyCthon
@Captain:' arr' thực sự có loại 'int * 'trong trường hợp đó, vì vậy nó sẽ không phù hợp với tình trạng quá tải đó. –