您不能强制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