Здравствуйте, jazzer, Вы писали:
J>стандартная библиотека — это считай что native: компилятор может какие угодно хаки применять в реализации стандартной библиотеки.
будем реалистами, он не станет этого делать
J>В любом случае, даже если бы оно было встроено непосредственно в язык, что бы изменилось интерфейсно?
Например, вот придумал только сейчас:
delegate<signature> - оператор объявления типа делегата с сигнатурой signature
delegate(function, оbject, (arg1, arg2, ... argN | _1, _2, ... _N) ) - оператор создания функционального объекта для делегата с сигнатурой function,
из функции function и (если function - член-функция) указателя на объект оbject
//короче std::bind-like синтаксис, пусть только дедукцией занимается компилятор, а не костыли вида std::bind
Живой пример:
enum class EventType
{
Test = 0x0001,
};
struct Object
{
void OnEvent(EventType event)
{
//1st subscriber callback
}
};
void OnEvent(EventType event)
{
//2nd subscriber callback
}
int main()
{
Object object;
delegate<void(EventType event)> d = delegate(&Object::OnEvent, &object); //делегат d инициализируется первым подписчиком
d += delegate(OnEvent); //добавляется второй подписчик
d += [](EventType event) { /*3rd subscriber callback*/ }; //добавляется третий подписчик
d -= delegate(OnEvent); //второй, пожалуй, лишний
d(EventType::Test); //вызов подписчиков 1 и 3: метода Object::OnEvent объекта object и анонимной функции
//???
//ENJOY!!1
}