gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 13:44:09 26 4
gpt4 key购买 nike

我想在 C++ 中实现 Bloch 的 Effective Java 中讨论的类型安全异构容器。该解决方案需要在 VS2010 中编译,但如果需要可以使用 boost。

更具体地说,我想实现一个实现以下接口(interface)的类

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

Demo .

关于java - 从 Bloch 的 Effective Java in C++ (VS2010) 实现类型安全的异构容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26589227/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com