Прямой вызов функтора возврата из bind1st и bind2nd

Возвращаемые значения bind1st и bind2nd являются производными от unary_function. Вызывая их, я думаю, что они предоставляют функциональный объект, который принимает один аргумент. Но это может быть неправильно.

Вот мой код

template<typename _T>
class fun: public std::unary_function<_T, _T>
{
public:
_T operator()(_T arg1, _T arg2) const {return arg1 + arg2;}
};

int main() {
bind2nd(fun<int>(),10)(10); //My intention is to directly call the results of bind2nd
}

Происходит много ошибок при сборке. Почему это не так?

0

Решение

Я считаю, что унарная функция работает с одним параметром, а бинарная функция — с двумя.
Например

  T operator()(T arg1, T arg2) const {return arg1 + arg2;}

является двоичной функцией

Измените шаблон (и не используйте ведущие подчеркивания):

template<typename T>
class fun: public std::binary_function<T, T, T>
//                     ^^^^^^--- well, it takes two parameters
{
public:
T operator()(T arg1, T arg2) const {return arg1 + arg2;}
};

Так, fun бинарный функтор После Вы связываете один из его аргументов, например позвонив std::bind2nd(func<int>(),10) тогда у вас будет одинарная функция. Это не изменит тип входа в bind2nd вызов.

3

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

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