Я только что работал с 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;
}
Я не знаю точно, является ли это «нормальным», но, я думаю, это так. Сигналы и слоты Qt' также позволяют это делать. – ereOn