bio*_*ics 3 d variant dynamic-typing phobos
我知道模板
T add(T)(T a, Tb){
return a + b;
}
Run Code Online (Sandbox Code Playgroud)
但这需要用户询问哪种类型将返回,我想在里面计算哪种类型将返回如下:
T getField( size_t column ){
if( column == 0 )
T = int;
else
T = string;
return to!T("1");
}
Run Code Online (Sandbox Code Playgroud)
我不知道我是否可以投射对象并改变原型.
谢谢大家
D,如C,C++,C#和Java是一种静态类型语言.所有类型必须在编译时知道.所以,不,你不能做你想做的事.
现在,您可以使用继承,联合或std.variant.Variant来获得动态类型的形式,但不完全像您尝试的那样.这只适用于动态语言.
对于类,类引用可以指向派生类的实例而不是引用所针对的基类,因此您可以获得多态/动态行为,但基类的类型在编译时是已知的,并且任何内容引用引用的必须是派生类型,因此必须是类.
对于联合,你可以有一个变量,它可以使用相同的内存保存不同的类型(因此它一次只能是一种类型),但它通常被认为是一个相当低级的构造,如果你真的不需要它最好避免它.union不会跟踪它当前的类型,所以如果它既可以是a又是inta string,它很容易持有int,但你用它作为string(反之亦然),导致讨厌的错误.
使用Variant(这可能就是你想要使用的),你可以拥有一个可以容纳不同类型的变量 - 类似于union - 但是你没有指定它可以容纳哪些类型(与union不同),它实际上保留了跟踪它目前所处的类型(与工会不同),因此使用起来更安全.
| 归档时间: |
|
| 查看次数: |
307 次 |
| 最近记录: |