boost::ptr_map の使い方
/** * コンテナクラス。 * BaseContainerを継承。 * 値の保持と,何を保持しているかを表示するメソッド。 */ template <class T> class Container : public BaseContainer { private: T value;
public: Container(T value) { this->value = value; }
<span class="synType">void</span> mes() {
std::cout << <span class="synConstant">"Container : value = "</span> << value << std::endl;
}
};
// ポインタとして宣言して new する // これをやると実行時に // error for object 0x7fff5fbff260: pointer being freed was not allocated // のようなエラーが出る(コンパイルは通る)。 // Container<int>* c; // c = new Container<int>(10); // m.insert(id1, c);
// 直接 new する m.insert(id2, new Container<float>(20));
// 値 m.find(key1)->second;
// Container.mes() の呼び出し m.find(key1)->second->mes();
#include <boost/ptr_container/ptr_map.hpp>
class BaseContainer { public: virtual void mes() = 0; };
template <class T> class Container : public BaseContainer { private: T value;
public: Container(T value) { this->value = value; }
<span class="synType">void</span> mes() {
std::cout << <span class="synConstant">"Container : value = "</span> << value << std::endl;
}
};
int main() { typedef boost::ptr_map<int, BaseContainer> m;
std::string key1 = <span class="synConstant">"n1"</span>;
std::string key2 = <span class="synConstant">"n2"</span>;
m.insert(key2, <span class="synStatement">new</span> Container<<span class="synType">int</span>>(<span class="synConstant">98</span>));
m.insert(key2, <span class="synStatement">new</span> Container<<span class="synType">float</span>>(<span class="synConstant">123.4</span>));
std::cout << m.size() << std::endl;
std::cout << m.find(key1)->first << std::endl;
m.find(key1)->second->mes();
m.erase(key1);
std::cout << m.size() << std::endl;
<span class="synStatement">return</span> <span class="synConstant">0</span>;
} 出力