gpt4 book ai didi

templates - 确定一个类型是否为 Nullable 并获取基本类型?

转载 作者:行者123 更新时间:2023-12-01 08:55:02 24 4
gpt4 key购买 nike

假设我有这个函数模板:

void bar(T)(T obj) {
// ...
}

如果 T 是某个 Nullable!U,我想改变函数的行为,这样如果 obj.isNulltrue,我做一些替代流程,或者继续,就像传递了一个普通的 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));
}

有没有办法检查 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));
}

关于templates - 确定一个类型是否为 Nullable 并获取基本类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28598206/

24 4 0