Код: Выделить всё
#include
using FunctionPtr = void (*)();
// Primary template
template
void demo() = delete;
// The common code default implementation
template
void demo() { };
// Detect if a specialization exists
template
concept has_demo = requires { demo(); };
static_assert(has_demo);
static_assert(!has_demo); // False - no user-provided specialization.
< /code>
Мне в конечном итоге нужно сохранить фактический указатель функции разрешенной функции в таблице диспетчеры Вулкана, поэтому я пытаюсь написать функцию разрешения, которая возвращает специализацию, если она существует, и не иначе: < /p>
constexpr FunctionPtr getPointer(void)
{
if constexpr(has_demo)
{
return demo;
}
return demo;
}
Я знаю, что я могу поддержать это, не удаляя версию по умолчанию и не давая версию, но это можно проверить, но это можно проверить, но это можно проверить, но это можно проверить, но это можно проверить. «Истинная» черта для каждой специализации функции, которую они предоставляют, что является худшим опытом пользователя с точки зрения пользователям, которые должны писать больше кода. Есть ли способ избежать этого?
Подробнее здесь: https://stackoverflow.com/questions/797 ... a-function
Мобильная версия