动态C++映射<字符串、基元(整数、双精度、字符串或数组)>
Dynamic C++ Map <String, Primitives (int, double, string, or array)>
我提前道歉,但我找不到这个。
在C++我想要一张地图。 这张地图将包含<string, Object>
;其中对象是在运行时从 XML 文档动态添加的。 对象可以是整数、双精度、字符串或整数、双精度或字符串数组。 密钥保证是唯一的。 但是,我需要一种方法来使用映射动态声明这一点。
应该为数据部分使用模板时,这可能是一个实例吗?
我不能使用像 boost 这样的大型库来实现这一点,因为这应该是一个轻量级的程序。(参考:使用提升C++库?
这与我试图实现的目标类似。 其中用户指定了基元类型:(参考:创建将类型 T 映射为类型 T 实例的键的字典)
std::map <std::string, ????> Values;
编辑:因此,如果我无法使用 boost,我可以使用模板来实现这一点吗?
在提升中,我正在推动这个:
typedef boost::variant<int, double, std::string> datum;
std::map<std::string, datum> Parms;
然后我稍后在运行时添加值(来自 XML,其中每个元素都有一个指定类型的属性)
Parms["a"] = 10; // int
Parms["b"] = 102.2039; // double
Parms["c"] = 6.6667e-07; // another double
Parms["d"] = "Hello world"; // std::string
问题是当我这样做时:
datum v1 = obj.get("c"); // need double, not datum
您可以考虑在结构中嵌入基元类型。可以定义从中派生不同结构的基类。您可能还需要将类型保存到结构中,但为了简单起见,我省略了它。
如果你真的需要基元类型,请忽略我的回答,选择Boost。
#include <map>
#include <string>
struct BaseObject {};
struct ObjectInt : public BaseObject
{
int a;
};
struct ObjectString : public BaseObject
{
std::string a;
};
int main()
{
BaseObject *oi, *os;
oi = new ObjectInt;
os = new ObjectString;
std::map<std::string, BaseObject *> objectMap;
objectMap["oi"] = oi;
objectMap["os"] = os;
delete oi;
delete os;
return 0;
}
相关文章:
- 如何在C++中的同一函数中使用字符串和双精度
- C 字符串返回字符串的整数/双精度/长整型值
- 如何从字符串转换为双精度*
- C++如何将字符串逐行转换为双精度
- 如何在 C++ 中将双精度数组中的值"force convert"到字符串输出中?
- 在C++中将字符串转换为双精度,而无需科学记数法
- 使用从文件(stod、strtod、atof)中提取的数据C++从字符串转换为双精度.csv
- 如何在C++中将字符串转换为双精度?
- 将双精度值转换为 char 变量时字符串流如何工作
- 在 c++ 中从双精度转换为字符串
- 从字符串转换为双精度和整数 - C++
- 如何从char16_t字符串文字中读取双精度?
- 分析字符串中的双精度和单词
- 使用 sprintf 和 %g 将双精度转换为字符串的意外结果
- C++将包含非人类可读数据的字符串转换为 200 双精度
- 将大双精度转换为科学记数法以用作字符串?
- 字符串和双精度的麻烦,等值后再得到一个数字
- 如何从字符串流中提取双精度
- 如何调用返回双精度或字符串并将其保存在地图上但作为对象的类的方法
- C# 是否有办法将双精度数组强制转换为类似于C++转换为 char* 的字符串?