Иногда необходимы забросы. Я столкнулся с этим при попытке использовать boost :: bind с перегруженными функциями-членами. По возможности лучше переименовывать функции, чтобы избежать приведения.

ункции является указателем на функцию ...
Но в случае перегрузки функций имена двух функций совпадают ...
Так на какую функцию указывает имя?

 davka31 мая 2011 г., 06:13
Вы можете посмотреть на похожий вопрос:stackoverflow.com/questions/2942426/...

Ответы на вопрос(1)

Решение Вопроса

в противном случае это неоднозначно. Видетьэтот пример (изменено, кроме ниже):

void foo(int a) { }
void foo(int a, char b) { }

int main()
{
    void (*functionPointer1)(int);
    void (*functionPointer2)(int, char);
    functionPointer1 = foo; // gets address of foo(int)
    functionPointer2 = foo; // gets address of foo(int, char)
}

Вы можете сделать это разными способами, но правило № 1?

Избегайте бросков!

В противном случае вы нарушите безопасность типа и, вероятно, выстрелите себе в ногу либо тогда, либо позже.
(Проблемы могут вызывать соглашения о вызовах, случайные изменения, которые вы не замечаете, и т. Д.)

 Nawaz31 мая 2011 г., 06:38
+1. @Mehrdad и @Ben: отметили, что вы оба сказали в моем сообщении. Спасибо :-)
 Mehrdad31 мая 2011 г., 06:50
@Nawaz: Если подумать, может быть, я должен упомянуть об этом в своем посте тоже. Я добавлю это. :)
 IronMensan31 мая 2011 г., 15:56
Иногда необходимы забросы. Я столкнулся с этим при попытке использовать boost :: bind с перегруженными функциями-членами. По возможности лучше переименовывать функции, чтобы избежать приведения.
 Nawaz31 мая 2011 г., 06:51
Да уж. Это было бы лучше, более полным. :-)

Ваш ответ на вопрос