从Bloch的C ++中的Effective Java实现类型安全的异构容器(VS2010)

时间:2014-10-27 13:58:39

标签: java c++ visual-studio-2010

我想实现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;
}

1 个答案:

答案 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;
}

Demo