Здравствуйте, о_О, Вы писали:
о_О>>>Всё это цветочки, по сравнению с бустом, в котором потокобезопасные сигналы быстрее обычных (академики постарались).
J>>Быстрее простого boost::function? (это я так напоминаю, что ты все хочешь в function засунуть.)
о_О>я хочу отдельный встроенный тип delegate, например как в C#, дающий хороший байткод, и дедукцию компилятором (сотни ошибок bind при малейшей ошибки уже достали)
Кстати насчет кода — мне кажется, жить стало бы сильно веселей, если бы можно было взять указатель на член как просто указатель на функцию (+ this). Т.е. был бы встроенный тип данных, который бы содержал собственно указатель на функцию и указатель на объект:
struct S
{
virtual void f()
};
struct C : S
{
void f();
};
typedef void (### PF)();
S* s = new C;
PF pf = &s->f; // тут генерируется код, который лезет в vtbl и находит C::f()
pf(); // в pf лежат два указателя - адрес C::f и s. В результате произойдет вызов s->C::f()
По идее для компилятора это особых сложностей не представляет, и вызов такой штуки будет эквивалентен вызову обычной функции по указателю. Даже если вызов функции-члена отличается от вызова обычной функции — компилятор может молча сделать переходник и сохранить указатель на него.
Так как этого нет, то приходится делать руками на уровне библиотеки — через шаблоны и виртуальные функции...