我有以下問題:C++如何模板之間的區別集裝箱和原生型
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());
}
我收到以下錯誤:
error: ‘template<class T> void myclass::set(std::string, T)’ cannot be overloaded
error: with ‘template<class T> void myclass::set(std::string, T)’
是有辦法的容器類型和區分模板中的其他類型?
型特徵。看起來像你需要使自己的is_container特質(http://stackoverflow.com/questions/7617203/is-it-possible-to-use-type-traits-to-check-whether-a-type-is-a -容器)。 (之前沒有做過,只是等待構建完成,所以沒有一個完整的答案 - 抱歉。但我會對解決方案感興趣;)) – peterchen 2012-07-19 09:40:20
你想'const T&data',和'ss << data'嗎? – 2012-07-19 09:40:46
這幾乎是一個很好的問題,但是有一些語法錯誤使得回答比需要的更困難。 ('T'應該是'set'的第一行的第三行的'data',而您對'write'的調用缺少''',但在添加之後仍然錯誤)。 – Flexo 2012-07-19 09:48:05