我想实现Bloch的C ++中的Effective Java中讨论的类型安全异构容器。解决方案需要在VS2010中编译,但必要时可以使用boost。
更具体地说,我想实现一个实现以下接口的类
abstract class IHeterogenousContainer{
template <typename T> virtual add(const IKey<T>& key, const T& value) = 0;
template <typename T> virtual T get(const IKey<T>& key) = 0;
}
答案 0 :(得分:0)
Boost.Any完成这项工作。这应该基本上做作者所显示的内容:
#include <iostream>
#include <string>
#include <map>
#include <typeindex>
#include <boost/any.hpp>
class heterogenous_map :
std::map<std::type_index, boost::any>
{
public:
template <typename T>
void add(T&& value)
{
emplace(typeid(typename std::remove_reference<T>::type), std::forward<T>(value));
}
template <typename T>
T & get() { return *boost::any_cast<T>(&at(typeid(T))); }
template <typename T>
T const& get() const { return *boost::any_cast<T>(&at(typeid(T))); }
};
int main()
{
heterogenous_map map;
map.add(6584);
map.add<std::string>("Hi!");
std::cout << "My favourite integer: " << map.get<int>() << '\n';
std::cout << "My favourite string : " << map.get<std::string>() << std::endl;
}