Относительно параметров типа шаблона в C ++ - PullRequest
5 голосов
/ 28 октября 2011

Я просматривал некоторые вопросы здесь и нашел пример кода, который передал (как выглядит) целое число, приведенное к типу void, как параметр типа для шаблонного объекта.Вот пример того, что я имею в виду:

SomeRandomObject<void(int)> Object;

Буду признателен, если кто-то сможет объяснить часть кода «void (int)» и что он делает.

Ответы [ 2 ]

7 голосов
/ 28 октября 2011

Этот тип является «функцией, которая принимает int и возвращает void».

2 голосов
/ 28 октября 2011

Тип является типом функции.Возможно, вы не очень знакомы с ним, потому что до сих пор он использовался только в типах указателей:

typedef int (ft)(void);  // Huh?  (raw function type)
typedef ft *fp;          // ???   (pointer to function)

typedef int (*fp_oldstyle)(void); // Ahh... (same as fp)

Сами функции имеют типы, но поскольку вы не можете объявлять переменные этого типа или ссылки на нихединственное, что вы обычно используете, это указатели, которые объявлены в привычном синтаксисе в последней строке.Для любой функции int foo(void); и foo, и &foo интерпретируются как указатель, поэтому «необработанный» тип функции ft не требуется.

Однако с новым магическим окружением шаблонаstd::function, std::bind и лямбда-выражения, теперь гораздо более распространенная вещь - видеть голые типы функций в параметрах шаблона.

...