我有一些問題超載模板成員運營商和使用make_pair:模板運營商<<重載和make_pair
class MyArchive
{
public:
template <class C> MyArchive & operator<< (C & c)
{
return (*this);
}
};
class A
{
};
int main()
{
MyArchive oa;
A a;
oa << a; //it works
oa << std::make_pair(std::string("lalala"),a); //it doesn't work
return 0;
}
我得到這個有趣錯誤:
/home/carles/tmp/provaserialization/main.cpp: In function ‘int main()’:
/home/carles/tmp/provaserialization/main.cpp:30: error: no match for ‘operator<<’ in ‘oa << std::make_pair(_T1, _T2) [with _T1 = std::basic_string<char, std::char_traits<char>, std::allocator<char> >, _T2 = A]((a, A()))’
/home/carles/tmp/provaserialization/main.cpp:11: note: candidates are: MyArchive& MyArchive::operator<<(C&) [with C = std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, A>]
爲什麼它的任何想法在第二種情況下沒有找到operator<<
?
不知道理論基礎是否非常有說服力,但是,因爲無論如何臨時都會堅持到表達式結尾(至少直到函數返回),並且不需要任何擴展。 – visitor 2011-02-16 12:34:36
@visitor:編輯並添加更多演示! – Nawaz 2011-02-16 12:41:47