Я только что работал с boost::bind
и boost::function
и заметил следующее поведение (которое мне показалось немного странным). Вы можете связать функцию с меньшим количеством параметров, чем требуется для типа boost :: function! Кажется, что любые дополнительные параметры просто игнорируются и просто исчезают.
Так почему же это поведение правильно? Я ожидал бы, что возникнет ошибка компиляции с указанием несовместимости.
См. Ниже пример рабочего кода, который показывает проблему
#include "boost/bind.hpp"
#include "boost/function.hpp"
namespace
{
int binder(const char& testChar,
const int& testInt,
const std::string& testString)
{
return 3;
}
}
int main(int c, char** argv)
{
boost::function<int(const char&,
const int&,
const std::string&,
const float&,
const std::string&,
const int&)> test;
test = boost::bind(&::binder, _1, _2, _3);
std::cout << test('c', 1, "something", 1.f, "more", 10) << std::endl;
}