海外旅行から帰ってきたら、まず何を食べる?

STLのmapコンテナにて、
valueを取得したり、
keyとvalueを登録するソースを書いていました。

get(key)にあたって、
valの取得に失敗した際には、
mapコンテナ上のkey-valueデータと
同期されているMySQLより、
データを取得してきます。

MySQLよりkeyに対応するvalの取得が
完了したら、
そのkeyとvalをmapコンテナに
insertしたいと思っています。

つきまして、
insertを行おうと、
「_container.insert(std::make_pair(key, val));」の一文を
ソースに挿入したところ、
「型が違う!」という内容(?)のエラー文で
コンパイル時に怒られてしまいました。

ただ、「どの様に直してごらん!」と
エラー文が言っているのか、
今いち、意味を理解できないでいます。

このエラー情報的には、
どんな風の型の改善を求められているのでしょうか?
教えていただけるとありがたいです。

もし可能でしたら、pointBの
「_container.insert(std::make_pair(key, val));」の部分で、
MySQLから取得済みkeyとvalを、
pointAのkeyとvalに代入する方法も
教えていただけるとありがたいです。

どちらかでも、
アドバイスをいただけますとありがたいです。
どうぞ宜しくお願い致します。


--------------------------------------------------
template<typename KEY, typename VALUE>
class hoge : public service_object<ipl<KEY, VALUE>>

{
virtual void put(key_type key, value_type val) {
_container.insert(std::make_pair(key, val)); // pointA
}

virtual cc::fu<value_type> get(key_type key) {

typename container_type::iterator iterator = _container.find(key);

if (iterator != _container.end()) {
return cc::fu<value_type>((*iterator).second);

}else {

//getにした場合MySQLよりkeyとvalueを取得完了できるので取得した。

/* MySQLより取得したkeyとvalをpointAのようにmapコンテナにinsertしたい。*/
_container.insert(std::make_pair(key, val)); //pointB

 }
}

};

--------------------------------------------------


■エラー文
error: conversion from
std::pair<std::_Rb_tree_iterator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::shared_ptr<csx::basic_message_cons<csx::basic_message<void, char> > > > >, bool>’ to non-scalar type ‘csrpc::future<boost::shared_ptr<csx::basic_message_cons<csx::basic_message<void, char> > > >’ requested

A 回答 (1件)

・template の型引数である KEY や VALUE と key_type, value_type はどのような関係にあるのか


・_container の型は何か
・変数 val の型は何か
あたりがわからんと, なんとも答えようがない気がするなぁ.
あと, 何も考えずに std::make_pair を使うのではなく, 適切な型の中で定義されている value_type を使ってオブジェクトを作った方がよいと思う.
もちろん「value_type で問題ないなら std::make_pair でも問題ない」わけなんだけど, std::make_pair よりも value_type の方が問題がより明確になるはず.
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!