Разница между указателем функции в качестве аргумента шаблона и подписью функции в качестве аргумента шаблона

В чем разница между приведенным ниже синтаксисом:

template<typename T>
struct A { ... };

A<void (*)()> o1; // <--- ok
A<void()> o2;  // <----- ??

Я хочу знать практическое использование второго синтаксиса отдельно от библиотек (я проверил, что мы не можем объявить объект void() внутри A). Я сослался на это вопрос, но это не поможет.

3

Решение

void() тип функции, не принимающей аргументов и не возвращающей ничего

void(*)() тип указателя на функцию, не имеющую аргументов и не возвращающую ничего

Как пример того, где void() используется и полезен, посмотрите на std::function — синтаксис, который он использует, намного лучше, чем если бы вам пришлось передавать подпись указателя функции. Вы можете использовать точно такой же синтаксис, когда имеете в виду «Я хочу сообщить этому классу шаблона подпись вызова».

В основном это просто синтаксический сахар. Но сахар — это пряность жизни.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]