假设我有这个功能模板:
void bar(T)(T obj) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
我想改变函数的行为,如果T是某些Nullable!U,那么如果obj.isNull是true,我做一些备用流程,或者继续,就像U传递普通类型一样.
void bar(T)(T obj) {
static if(is(T == Nullable!U)) { // ?
if(obj.isNull) {
writeln("Object was null!");
return;
}
auto realObj = obj.get;
} else {
alias realObj = obj;
}
writeln("Object was "~to!string(realObj));
}
Run Code Online (Sandbox Code Playgroud)
有没有办法检查是否T是一个实例Nullable,如果是,得到包装类型?
或者更一般地说,有没有办法检查类型T是否是某个模板的实例化,如果是这样的话Foo,获取模板参数?
您可以为Nullables 提供特定的重载:
void bar(T : Nullable!U, U)(T obj) {
if (obj.isNull) {
writeln("Object was null!");
return;
}
bar(obj.get);
}
void bar(T)(T obj) {
writeln("Object was "~to!string(obj));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
67 次 |
| 最近记录: |