module testmodule;
struct testmodule {}
pragma(msg, __traits(allMembers, testmodule));
pragma(msg, __traits(allMembers, .testmodule));
印刷品:
tuple()
tuple()
当模块中的声明具有模块名称时,该怎么办?
最佳答案
没有提供用于这种错误解释的内置机制,因为通常编译器可以自行解决它,而根本没有预见到这种必要性。
这是一个简单的库实用程序,可以概括@rcorre提出的方法(很好的主意!):
module getmod;
struct getmod {};
template isModule(alias sym)
{
static if (is(typeof(sym) == function))
enum isModule = false;
else
{
import std.array : startsWith;
enum isModule = sym.stringof.startsWith("module ");
}
}
template Module(alias sym)
if (isModule!sym)
{
alias Module = sym;
}
template Module(alias sym)
if (!isModule!sym)
{
import std.typetuple : TT = TypeTuple;
alias Module = TT!(__traits(parent, sym))[0];
}
pragma(msg, __traits(allMembers, Module!getmod));
// tuple("object", "getmod", "isModule", "Module", "main")
这不如内置符号删除功能好,但应该足够实用。
关于reflection - 如何获得模块的所有成员/功能?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29315430/