您不能強制operator<<
在右側採用兩個參數。下面的代碼:
obj<<("tgset10","mystring");
不工作與兩個參數的函數調用,但實際上只是使用了,
操作。但它可能不是你感興趣的。
如果你需要傳遞兩個參數給<<
運算符,你需要把它們換成其他(單個)類型。例如,您可以使用標準std::pair,即std::pair<const char*, const char*>
。
但請注意,operator<<
也應該返回一些適合於<<
鏈接的合理類型。你的情況可能是tgsetmap&
。下面的版本應該很好地工作:
#include <map>
#include <string>
#include <iostream>
class tgsetmap
{
public:
typedef std::map<std::string, std::string> list_type;
typedef list_type::value_type item_type;
list_type tgsetlist;
tgsetmap& operator<<(item_type item)
{
tgsetlist.insert(item);
return *this;
}
};
int main()
{
tgsetmap obj;
obj << tgsetmap::item_type("tgset10","mystring")
<< tgsetmap::item_type("tgset20","anotherstring");
std::cout << obj.tgsetlist.size() << std::endl;
}
請注意,我添加類型定義,不必一遍遍重複類型名稱。我也讓operator<<
返回一個tgsetmap&
,這樣<<
可以被鏈接(在上面修改的main()
中使用)。最後,我重用了std::map<...>::value_type
來簡化它,但您也可以使用其他類型的自己的。
但我相信你可能更喜歡使用常規方法。喜歡的東西:
void add(const char *str1, const char *str2)
{
tgsetlist.insert(std::map<std::string, std::string>::value_type(str1, str2));
}
(類聲明中),然後輸入:
obj.add("tgset10", "mystring");
我確實知道這一點,但我想在這裏使用流操作符。對我來說不是那麼有趣的解決方案。 – Vijay 2012-07-18 09:23:05
前段時間我還添加了'<<'運算符代碼。 – 2012-07-18 09:26:57
謝謝Michal.Learned一個新的東西:) – Vijay 2012-07-19 06:12:59