如何从该类外部获取类的基类型?我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
}
Run Code Online (Sandbox Code Playgroud)
我希望至少在第二种情况下获得A,但这会打印出来
void
void
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想将某个类T的基类分配给别名,并像使用任何其他类型一样使用它.例如:
alias T = __traits(parent, V);
T t = new T();
Run Code Online (Sandbox Code Playgroud)
小智 6
__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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
99 次 |
| 最近记录: |