gpt4 book ai didi

d - 获取 D 类的父类

转载 作者:行者123 更新时间:2023-12-04 10:48:53 25 4
gpt4 key购买 nike

如何从该类外部获取该类的基类型?我在文档中找到了特征 parent,但我不确定如何使用它。

module test;
import std.stdio;

class A {}
class B : A { }

void main() {
writeln(typeid(__traits(parent, B)));
writeln(typeid(__traits(parent, test.B))); // try prefixing with module name
}

我希望至少在第二种情况下得到 A,但是打印出来

void
void

理想情况下,我想将某个类 T 的基类分配给一个别名,并像使用任何其他类型一样使用它。例如:

alias T = __traits(parent, V);
T t = new T();

最佳答案

__traits(parent, ...)是关于范围的。 __traits(parent, B)test 模块。文档对此过于模糊。

std.traits.BaseClassesTuple正是您要找的。

作为一般规则,首先查看 std.traits。丑陋的 __traits 不应经常出现在用户代码中。


一些工作示例代码:

module test;
import std.stdio;
import std.traits;

class A {}
class B : A { }

void main() {
writeln(__traits(parent, B).stringof); /* prints "module test" */
alias Bases = BaseClassesTuple!B;
writeln(Bases.stringof); /* prints "(A, Object)" */
static assert(Bases.length > 0);
alias T = Bases[0];
auto t = new T;
}

关于d - 获取 D 类的父类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24938162/

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