Я пишу функциональную обертку для нашего внутреннего API, который недавно изменился, и я хотел бы, чтобы моя функция поддерживала обе версии, в зависимости от того, какой заголовок был включен, то есть какая версия функции доступна: < /p>
Код: Выделить всё
#include
#include
#include
// /libv1/include/api.h
void apiFoo(){
std::cout
if constexpr(g_newApi) {
apiFoo(g_name);
}
else {
apiFoo();
}
< /code>
Но весь этот код не может компилировать с аналогичным сообщением: < /p>
error: too many arguments to function 'void apiFoo()'
31 | template struct takesArg
Есть ли способ проверить бесплатное существование функции в время компиляции, или мне нужно придерживаться #ifdef ? В настоящее время я ограничен C ++ 17, но если есть решение C ++ 20, мне также было бы интересно.
Подробнее здесь:
https://stackoverflow.com/questions/797 ... mpile-time