operator<<
右側に 2 つの引数を強制することはできません。次のコード:
obj<<("tgset10","mystring");
2 つの引数を持つ関数呼び出しとして機能せず、代わりに,
演算子を使用します。しかし、それはおそらくあなたが興味を持っているものではありません.
2 つの引数を<<
演算子に渡す必要がある場合は、それらを他の (単一の) 型でラップする必要があります。たとえば、標準の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 を追加したことに注意してください。また、連鎖できるようにreturn operator<<
aも作成しました(上記の変更のように使用されます)。最後に、簡単にするために を再利用しましたが、独自の他のタイプを使用することもできます。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");