从Bloch的Effective Java in C++实现类型安全的异构容器(VS2010)
Implementing typesafe heterogeneous container from Bloch's Effective Java in C++ (VS2010)
我想用C++实现Bloch的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;
}
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;
}
演示。
相关文章:
- 在C++中,如何创建包含可变模板对象的异构向量?
- 创建异构顶点数据数组的可移植方法
- std::variant vs指向C++中异构容器基类的指针
- C++中的集合(异构类型的数组)
- 从异构列表中提取数据
- Push_back一组(异构)向量的实现
- 使用 std::vector<char> 作为异构记录的存储是否安全?
- 是否可以使用 std::vector<std::any> vec;这将导致异构数据类型
- 异构容器查找 C++98
- 编译时排序的异构元组
- 异构初始化列表
- 派生实例不是指针时的基类的异构容器
- 顺序异构函数执行器
- 我们可以使用异构查找比较器对 STL 关联容器执行"partial-match"搜索吗?
- 异构作业处理器的并行化
- 如何解析没有前置标记的异构列表
- C++异构类型迭代器的迭代器
- 异构变量非类型模板参数计数是否灵活
- 如何在异构类的实例上循环调用具有相同名称和参数的方法
- 从Bloch的Effective Java in C++实现类型安全的异构容器(VS2010)