Tôi có vấn đề sau đây:C++ như thế nào để phân biệt giữa mẫu cho thùng chứa và nguồn gốc loại
template<class T>
void set(std::string path, const T data)
{
stringstream ss;
ss << data << std::endl;
write(path, ss.str();
}
template<class T>
void set(std::string path, const T data)
{
std::stringstream ss;
for(typename T::const_iterator it = data.begin(); it < data.end(); ++it)
{
ss << *it;
if(it < data.end() -1)
ss << ", ";
}
ss << std::endl;
write(path, ss.str());
}
tôi nhận được lỗi sau:
error: ‘template<class T> void myclass::set(std::string, T)’ cannot be overloaded
error: with ‘template<class T> void myclass::set(std::string, T)’
Có cách nào để phân biệt giữa các loại container và các loại khác trong mẫu?
đặc điểm loại. Có vẻ như bạn cần tạo đặc điểm is_container của riêng mình (http://stackoverflow.com/questions/7617203/is-it-possible-to-use-type-traits-to-check-whether-a-type-is-a -thùng đựng hàng). (Đã không làm điều này trước đây, và chỉ cần chờ đợi cho một xây dựng để hoàn thành, do đó, không phải là một câu trả lời hoàn chỉnh - xin lỗi.Nhưng tôi sẽ quan tâm đến giải pháp;)) – peterchen
Bạn có muốn 'const T & data', và' ss << data' ?? –
Đây là * gần như * một câu hỏi hay, nhưng có một vài lỗi cú pháp khiến nó khó trả lời hơn là cần thiết. ('T' nên là' dữ liệu' trên dòng thứ ba của dạng đầu tiên của 'set' và các lệnh gọi' write' của bạn thiếu một ')' nhưng vẫn sai sau khi thêm vào đó). – Flexo