r****t 发帖数: 10904 | 1 有需要在 Dictionary 里面存不同类型的数据 as values,静态语言怎么存?
我用的是 C#, cast 来回显得很丑。有什么好办法么?
目前想法是整一个 interface 然后重新实现各种类型。
但立即的问题是 method arguments 比较难处理,实现里面仍然经常需要 cast。 |
w***g 发帖数: 5958 | 2 没有通用的办法。针对你的应用看看怎么弄好。
我感觉本身dict里需要存不同类型的数据这个设计就有问题。
C++有个boost.any,不过我觉得危险,从来没用过。
【在 r****t 的大作中提到】 : 有需要在 Dictionary 里面存不同类型的数据 as values,静态语言怎么存? : 我用的是 C#, cast 来回显得很丑。有什么好办法么? : 目前想法是整一个 interface 然后重新实现各种类型。 : 但立即的问题是 method arguments 比较难处理,实现里面仍然经常需要 cast。
|
r****t 发帖数: 10904 | 3
这种需求在现实世界里面是客观存在的。动态语言也能直接实现。
如果因为静态语言的要求强制分成多个 dict,商业逻辑 code
扩展性,简洁方面会有些问题。
【在 w***g 的大作中提到】 : 没有通用的办法。针对你的应用看看怎么弄好。 : 我感觉本身dict里需要存不同类型的数据这个设计就有问题。 : C++有个boost.any,不过我觉得危险,从来没用过。
|
w***g 发帖数: 5958 | 4 你非要我说,我会考虑embed一个python到C++里面: )
比如一旦上了boost.any,其实基本上就是python了。
【在 r****t 的大作中提到】 : : 这种需求在现实世界里面是客观存在的。动态语言也能直接实现。 : 如果因为静态语言的要求强制分成多个 dict,商业逻辑 code : 扩展性,简洁方面会有些问题。
|
c**x 发帖数: 492 | 5 可以用c#里用dynamic, 例子:
IDictionary map = new Dictionary
{
{"Key1", "String1"},
{"Key2", 123},
{"Key3", 456.7D},
{"Key4", true},
{"Key5", 90M},
{"Key6", new List()},
};
map["Key6"].Add("innerString");
map["Key6"].Add("Apple");
map["Key6"].Add("Orange");
【在 r****t 的大作中提到】 : 有需要在 Dictionary 里面存不同类型的数据 as values,静态语言怎么存? : 我用的是 C#, cast 来回显得很丑。有什么好办法么? : 目前想法是整一个 interface 然后重新实现各种类型。 : 但立即的问题是 method arguments 比较难处理,实现里面仍然经常需要 cast。
|
l*********s 发帖数: 5409 | 6 or boost.variant, a bit more solid & efficent than boost.any but does not
look as clean. |
x****u 发帖数: 44466 | 7 boost有个递归variant类型
【在 w***g 的大作中提到】 : 没有通用的办法。针对你的应用看看怎么弄好。 : 我感觉本身dict里需要存不同类型的数据这个设计就有问题。 : C++有个boost.any,不过我觉得危险,从来没用过。
|
g****t 发帖数: 31659 | 8 是不是生产上会比较难用?not safe?
【在 x****u 的大作中提到】 : boost有个递归variant类型
|
s*****V 发帖数: 21731 | 9 boost的命令行lib用的就是实现你这个dict
https://github.com/boostorg/program_options/blob/develop/include/boost/
program_options/variables_map.hpp
【在 r****t 的大作中提到】 : 有需要在 Dictionary 里面存不同类型的数据 as values,静态语言怎么存? : 我用的是 C#, cast 来回显得很丑。有什么好办法么? : 目前想法是整一个 interface 然后重新实现各种类型。 : 但立即的问题是 method arguments 比较难处理,实现里面仍然经常需要 cast。
|
m*****o 发帖数: 110 | |
x****u 发帖数: 44466 | 11 比较好用,可以把一般的json之类对象低成本放进去
但是原生的强类型getter不好使,最好自己重新包装一下
【在 g****t 的大作中提到】 : 是不是生产上会比较难用?not safe?
|
x****u 发帖数: 44466 | |