可以存储在 std::map 中然后公开映射的 C++ 模板类型

标签 c++ dictionary

我有一个类 myclass,它有一个私有(private)成员 param_map

class some_class {

 private:
  std::map<std::string,std::shared_ptr<parameter> > param_map;
};

我想公开这个映射以允许其他类,我已经创建了添加、删除、获取参数方法,你想怎么做就怎么做。但我想公开这一点,以便其他类可以遍历 map 。

问题 1:执行此操作最安全的方法是什么。

参数还有一个成员值,我希望它是 int/float/bool,所以一种选择是使用模板定义它

template<class T>
class parameter {
  public:
   T get_value { return value_; }

  private:
   T value_;
}

Q2:但是我如何将这种类型存储在 map 中?以及它将如何改变 param_map 的定义。我也会考虑非模板解决方案(但我更喜欢一张 map )

PS:我宁愿避免使用 boost,我更喜欢使用 c++x0 标准库,但如果 boost 是最佳选择,那么我会考虑。如果您也可以发布代码示例,那就太好了。

问候

标记

最佳答案

Q1:您可以公开一个遍历映射的迭代器,就像 std::map 那样。

Q2:可以使用3种不同的map,或者使用boost::any来存储值。如果你想避免提升,你可以存储 void* 代替 boost::any(但我通常不会采用 void* 方式——我宁愿使用 boost 的必需部分)。

关于可以存储在 std::map 中然后公开映射的 C++ 模板类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3785646/

相关文章:

c++ - 如何声明包含队列成员的动态结构数组?

c++ - 指针引用类赋值

c++ - 按结构元素索引 std/boost::map

javascript - Node JS Leaflet 磁贴从同一域提供服务错误

r - 访问嵌套列表中的数据帧

c++ - PIMPL 习语 VS 前向声明

c++ - WaitForMultipleObjects 会修改*多个*对象的状态吗?

c++ - 修改右值引用的值 - 它是如何工作的?

python - heapq.nsmallest 如何工作

python - python 嵌套字典列表索引必须是整数