Что это за аргумент шаблона? - PullRequest
4 голосов
/ 12 декабря 2011

Итак, я сталкивался сегодня с программированием шаблонов на C ++. Может кто-нибудь объяснить мне, что такое A (*) (B) в качестве аргумента шаблона?

template <class X, class Y, class A, class B>
struct replace_type_impl<A(*)(B),X,Y,false>
{
  typedef typename replace_type<A,X,Y>::type (*type)(typename replace_type<B,X,Y>::type);
};

Ответы [ 4 ]

8 голосов
/ 12 декабря 2011

Тип A (*)(B) - это тип указателя на функцию, которая принимает один аргумент типа B и возвращает значение типа A.

Это просто другой тип. Ваш код является экземпляром частичной специализации шаблона класса replace_type_impl.

4 голосов
/ 12 декабря 2011

Это тип указателя на функцию, для унарной функции, которая принимает B и возвращает A.

Этот шаблон заменяет X на Y [*] везде, где X появляется в типе указателя на функцию A(*)(B),Он заменяет его отдельно в типе возврата A и типе параметра B, а затем объединяет их вместе в новый typedef с именем type, который также является указателем на функцию.

[*] или, возможно, заменяет Y наX, или, возможно, делает что-то совершенно другое - я не знаю , что делает replace_type, но я думаю, что это справедливое предположение.

1 голос
/ 12 декабря 2011

A(*)(B)

Это тип; указатель на функцию, которая принимает B по значению и возвращает A по значению.

1 голос
/ 12 декабря 2011

Это указатель на функцию, которая возвращает A и принимает B в качестве единственного аргумента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...