从函数 return 类型推断模板参数类型
infer template argument type from function return type
我希望这段代码能够编译,但它没有。
ReturnType tryMe(ReturnType)() {
static if (is(ReturnType == int)) {
return 42;
} else static if (is(ReturnType == string)) {
return "Hello!";
} else {
assert(0);
}
}
unittest {
string r = tryMe();
assert(r == "Hello!");
int v = tryMe();
assert (v == 42);
}
如何避免此错误消息?
Error: template app.tryMe cannot deduce function from argument types !()(), candidates are:
app.tryMe(ReturnType)()
如果我 'refactor' 我的函数,那么我 return 通过传入的引用得到结果,代码会编译。但它使函数的 api 非常难看。
unittest {
auto r = tryMe!string();
assert(r == "Hello!");
auto v = tryMe!int();
assert (v == 42);
}
有人可能会纠正我,但我认为编译器无法从赋值推断类型。
我希望这段代码能够编译,但它没有。
ReturnType tryMe(ReturnType)() {
static if (is(ReturnType == int)) {
return 42;
} else static if (is(ReturnType == string)) {
return "Hello!";
} else {
assert(0);
}
}
unittest {
string r = tryMe();
assert(r == "Hello!");
int v = tryMe();
assert (v == 42);
}
如何避免此错误消息?
Error: template app.tryMe cannot deduce function from argument types !()(), candidates are:
app.tryMe(ReturnType)()
如果我 'refactor' 我的函数,那么我 return 通过传入的引用得到结果,代码会编译。但它使函数的 api 非常难看。
unittest {
auto r = tryMe!string();
assert(r == "Hello!");
auto v = tryMe!int();
assert (v == 42);
}
有人可能会纠正我,但我认为编译器无法从赋值推断类型。