您不能强制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;
}
请注意,我添加了 typedef 以不必一遍又一遍地重复类型名称。我还做了operator<<
return atgsetmap&
以便<<
可以链接(如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");