Синтаксис типа функции шаблона типа int (int, int) - PullRequest
6 голосов
/ 11 августа 2011

Я помню, что при использовании Boost.Spirit и для добавления std :: function к C ++ 0x тип функции указывается с использованием синтаксиса, в котором не используются указатели, как при определении std::function<bool(int)> fn, тогда как вы произвел бы указатель как (bool(*)(int))fn.

Может кто-нибудь сказать мне название этого нового синтаксиса или какие-либо ссылки на него, или как его использовать? Это похоже на синтаксис полиморфного типа функции, который применим и к функторам, но я не знаю, как его использовать.

Ответы [ 2 ]

5 голосов
/ 11 августа 2011

bool(int) - тип функции; bool(*)(int) - это тип указателя функции. Другими словами, если вы определите

typedef bool(BF)(int);
typedef bool(pBF*)(int);

тогда BF* совпадает с pBF.

Шаблон std::function фиксирует типы возврата и аргумента с помощью (variadic) шаблонов:

template <typename R, typename ...Args> struct function
{
  function(R(&f)(Args...)); // conceptually
}
4 голосов
/ 11 августа 2011

Это не новый синтаксис, хотя старые компиляторы иногда отклоняли его.Это просто тип функции по сравнению с типом указателя на функцию, подобный типу массива по сравнению с указателем на массив.-значения быстро уменьшаются до указателей на функции, что делает их в основном бесполезными.Конечно, кроме шаблонов.

...