Мой API потребует вызова времени выполнения (constfoo (str)) , чтобы получить окончательный результат, я хотел сократить это, потому что реальные имена функций являются как бы условны. Для этого мне нужно каким-то образом обернуть постоянную функцию, но я не могу сделать это, поскольку аргумент не может быть контейкспр, это также строковый буквальный, который требует, чтобы его размер был известен во время компиляции. PrettyPrint-Override ">
Код: Выделить всё
int runtime(int val) {
std::string foo = "foo"; // some run time operation
return val + 2;
}
template consteval int constFoo(const char (&data)[N]) {
// ...
const auto d = data[0];
return N;
}
template int outer(const char (&data)[N]) {
int val = constFoo(data); // Call to consteval function 'constFoo' is not a constant expression
return runtime(val);
}
int main() {
auto d = outer("d");
}
Кроме того, если бы это было как -то возможно, я бы предпочел избежать решения, в котором букваль передается как аргумент шаблона, но, насколько я знаю, это невозможно.
Подробнее здесь:
https://stackoverflow.com/questions/797 ... l-function