Redian新闻
>
静态语言怎么存 values of different type into Dictionaries
avatar
静态语言怎么存 values of different type into Dictionaries# Programming - 葵花宝典
a*2
1
【 以下文字转载自 Faculty 讨论区 】
发信人: ans2 (ans2), 信区: Faculty
标 题: 这个推荐信的请求我应该拒绝不
发信站: BBS 未名空间站 (Fri May 26 21:49:55 2017, 美东)
以前一个同事海归了,一直没怎么联系,这次突然找我要写推荐信,关于以前共同工作
的一段经历。可是我问他这个推荐信做什么的,他又不说清楚,说有好几个地方要用,
一会说找工作,一会说申请移民,请我写一个相当于多用途的推荐信。我对他起草的推
荐信的内容没啥意见,但是这种都不知道谁会看的推荐信,该不该签字?
avatar
r*t
2
有需要在 Dictionary 里面存不同类型的数据 as values,静态语言怎么存?
我用的是 C#, cast 来回显得很丑。有什么好办法么?
目前想法是整一个 interface 然后重新实现各种类型。
但立即的问题是 method arguments 比较难处理,实现里面仍然经常需要 cast。
avatar
w*g
3
没有通用的办法。针对你的应用看看怎么弄好。
我感觉本身dict里需要存不同类型的数据这个设计就有问题。
C++有个boost.any,不过我觉得危险,从来没用过。

【在 r****t 的大作中提到】
: 有需要在 Dictionary 里面存不同类型的数据 as values,静态语言怎么存?
: 我用的是 C#, cast 来回显得很丑。有什么好办法么?
: 目前想法是整一个 interface 然后重新实现各种类型。
: 但立即的问题是 method arguments 比较难处理,实现里面仍然经常需要 cast。

avatar
r*t
4

这种需求在现实世界里面是客观存在的。动态语言也能直接实现。
如果因为静态语言的要求强制分成多个 dict,商业逻辑 code
扩展性,简洁方面会有些问题。

【在 w***g 的大作中提到】
: 没有通用的办法。针对你的应用看看怎么弄好。
: 我感觉本身dict里需要存不同类型的数据这个设计就有问题。
: C++有个boost.any,不过我觉得危险,从来没用过。

avatar
w*g
5
你非要我说,我会考虑embed一个python到C++里面: )
比如一旦上了boost.any,其实基本上就是python了。

【在 r****t 的大作中提到】
:
: 这种需求在现实世界里面是客观存在的。动态语言也能直接实现。
: 如果因为静态语言的要求强制分成多个 dict,商业逻辑 code
: 扩展性,简洁方面会有些问题。

avatar
c*x
6
可以用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。

avatar
l*s
7
or boost.variant, a bit more solid & efficent than boost.any but does not
look as clean.
avatar
x*u
8
boost有个递归variant类型

【在 w***g 的大作中提到】
: 没有通用的办法。针对你的应用看看怎么弄好。
: 我感觉本身dict里需要存不同类型的数据这个设计就有问题。
: C++有个boost.any,不过我觉得危险,从来没用过。

avatar
g*t
9
是不是生产上会比较难用?not safe?

【在 x****u 的大作中提到】
: boost有个递归variant类型
avatar
s*V
10
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。

avatar
x*u
12
比较好用,可以把一般的json之类对象低成本放进去
但是原生的强类型getter不好使,最好自己重新包装一下

【在 g****t 的大作中提到】
: 是不是生产上会比较难用?not safe?
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。