Возвращаемые значения 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
}
Происходит много ошибок при сборке. Почему это не так?
Я считаю, что унарная функция работает с одним параметром, а бинарная функция — с двумя.
Например
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
вызов.
Других решений пока нет …