如何处理空的 AliasSeq?
How to handle empty AliasSeq?
我想将存储在单个 string
中的限定名称转换为 AliasSeq
。
这是我的尝试:
template QName(string qname_str) {
static if (qname_str.empty) {
import std.meta : AliasSeq;
alias QName = AliasSeq!();
} else {
import std.meta : aliasSeqOf;
alias QName = aliasSeqOf!(qname_str.split("."));
}
}
unittest {
// OK:
static assert(QName!"com.example"[0..$-1] == QName!"com");
// Error: incompatible types for ((tuple()) == (())): cannot use '==' with types
static assert(QName!"com"[0..$-1] == QName!"");
}
注意与空限定名比较的错误。我尝试了各种尝试,所以左侧的类型与右侧的类型相同,我也尝试将它们与 is
进行比较,但在所有情况下我都出错了。关于如何处理空 AliasSeq
-s 的任何建议?
模板很好,但为了比较,您需要 helper struct 和 is
:
unittest {
struct S(A...) {}
static assert(is(S!(QName!"com.example"[0..$-1]) == S!(QName!"com")));
static assert(is(S!(QName!"com.example", QName!"mail") == S!(QName!"com.example.mail")));
static assert(is(S!(QName!"com"[0..$-1]) == S!(QName!"")));
}
我想将存储在单个 string
中的限定名称转换为 AliasSeq
。
这是我的尝试:
template QName(string qname_str) {
static if (qname_str.empty) {
import std.meta : AliasSeq;
alias QName = AliasSeq!();
} else {
import std.meta : aliasSeqOf;
alias QName = aliasSeqOf!(qname_str.split("."));
}
}
unittest {
// OK:
static assert(QName!"com.example"[0..$-1] == QName!"com");
// Error: incompatible types for ((tuple()) == (())): cannot use '==' with types
static assert(QName!"com"[0..$-1] == QName!"");
}
注意与空限定名比较的错误。我尝试了各种尝试,所以左侧的类型与右侧的类型相同,我也尝试将它们与 is
进行比较,但在所有情况下我都出错了。关于如何处理空 AliasSeq
-s 的任何建议?
模板很好,但为了比较,您需要 helper struct 和 is
:
unittest {
struct S(A...) {}
static assert(is(S!(QName!"com.example"[0..$-1]) == S!(QName!"com")));
static assert(is(S!(QName!"com.example", QName!"mail") == S!(QName!"com.example.mail")));
static assert(is(S!(QName!"com"[0..$-1]) == S!(QName!"")));
}