d -返回动态类型



我知道模板像

T add(T)(T a, Tb){
    return  a + b;
}

但是这需要用户询问将返回哪种类型,我想在方法中计算将返回哪种类型,如:

T getField( size_t column ){
    if( column == 0 )
        T = int;
    else
        T = string;
    return to!T("1");
}

我不知道是否可以强制转换为对象并更改原型。

Thanks to all

D,像C、c++、c#和Java一样,是一种静态类型语言。所有类型必须在编译时已知。所以,不,你不能做你想做的事。

现在,您可以使用继承、联合或std.variant.Variant来获得一种形式的动态类型,但并不完全像您想要做的那样。这只适用于动态语言。

  • 对于类,类引用可以指向派生类的实例,而不是指向引用所针对的基类,因此您可以获得多态/动态行为,但是基类的类型在编译时是已知的,并且引用引用的必须是派生类型,因此必须是类。

  • 对于联合,你可以有一个变量,它可以使用相同的内存保存不同的类型(所以一次只能是一种类型),但它通常被认为是一个相当低级的结构,如果你真的不需要它,最好避免。union不跟踪它当前的类型是什么,所以如果它既可以是int又可以是string,那么它很容易持有int,但是您将它用作string(反之亦然),这会导致严重的错误。

  • 使用Variant(这可能是你想使用的),你可以有一个变量可以保存不同的类型-类似于联合-但你不指定它可以保存哪些类型(不像联合),它实际上会跟踪它当前保存的类型(不像联合),所以使用起来更安全。

相关内容

  • 没有找到相关文章

最新更新