gpt4 book ai didi

d - 返回动态类型

转载 作者:行者123 更新时间:2023-12-03 03:47:59 25 4
gpt4 key购买 nike

我知道这样的模板

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");
}

我不知道是否可以转换为对象并更改原型(prototype)。

感谢大家

最佳答案

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

现在,您可以使用 inheritance , unions ,或std.variant.Variant获得一种动态类型的形式,但与您想要做的不太一样。这只适用于动态语言。

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

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

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

关于d - 返回动态类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7972526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com