неуказанная связь - PullRequest
       13

неуказанная связь

1 голос
/ 29 октября 2011

Я исследовал, что такое std::bind и для чего он (в конечном итоге это может быть другой вопрос) в MSDN: http://msdn.microsoft.com/en-us/library/bb982702.aspx

И увидел, что перечислены прототипы:

template<class Fty, class T1, class T2, ..., class TN>
   unspecified bind(Fty fn, T1 t1, T2 t2, ..., TN tN);
template<class Ret, class Fty, class T1, class T2, ..., class TN>
   unspecified bind(Fty fn, T1 t1, T2 t2, ..., TN tN);

Что смущает меня по двум причинам.1) В последний раз я проверял, что MSVC не реализовывал шаблоны с переменными числами, и 2) Мой вопрос: что там означает слово unspecified?(Кажется, это не связано с неопределенным поведением.)

Ответы [ 3 ]

1 голос
/ 29 октября 2011

Существуют отдельные перегрузки, которые ожидают {1, 2, ..., N } аргументов.Вместо того, чтобы перечислить их все, в документации используются сокращения, чтобы показать, что вы можете использовать различное количество параметров.Он не предназначен для иллюстрации правильного синтаксиса C ++.Я ожидаю, что в документации где-то будет упоминаться, что такое N .

Тип результата зависит от переданных аргументов. Это будет некоторая форма функтора, и этот функтор обычно будет сохранятьсяобъект function, или вы можете передать результат прямо как-то как for_each и позволить выводу типа шаблона компилятора выяснить это.Пока результат вызывается, фактический тип не имеет значения, и его сложно будет кратко объяснить в документации.

1 голос
/ 29 октября 2011

Visual Studio не реализует шаблоны с переменным числом аргументов.Они эмулируют концепцию, по существу имея много перегрузок функции (вероятно, построенных с помощью макросов).Вот как реализовано boost::bind, откуда std::bind.

Тип возврата unspecified std::bind - это именно то, что нужно.Это должен быть объект подвижного типа.Этот объект будет перегружать operator(), поэтому можно вызывать функцию, связанную с std::bind.

1 голос
/ 29 октября 2011

не указано в возвращаемом типе означает, что этот тип, ну, в общем, не указан. Стандарт не требует, чтобы определенный тип возвращался из bind, если возвращаемый тип соответствует требованиям, установленным стандартом.

Что касается ..., я не знаю, реализует ли их VS или нет, но вы увидите ту же документацию для boost::bind, и она уже некоторое время компилируется в разных компиляторах без поддержки вариадических шаблонов. ... в документации говорится, что вы можете передавать N аргументов разных типов, но это не обязательно означает, что существует один шаблон, который делает это, он может быть реализован в виде набора из 1, 2, 2- ary ... N-ary шаблоны.

Документация показывает поведение, которое вы можете ожидать от его использования, а не детали того, как это реализовано.

...