Почему ISO C ++ запрещает принимать адрес связанной функции члена, чтобы сформировать указатель на функцию члена?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему ISO C ++ запрещает принимать адрес связанной функции члена, чтобы сформировать указатель на функцию члена?

Сообщение Anonymous »

Вот ошибка в GCC (которую я уже исправил): < /p>

iso c ++ Запрещено принимать адрес связанной функции, чтобы сформировать указатель для члена функции < /p>
< /blockquote>
Это строка ошибок моего кода: < /p>

Код: Выделить всё

threads[i] = std::thread(&runnable->runTask, runnable, i, num_total_tasks);

Код: Выделить всё

runnable
— это объект, а runTask — нестатическая функция-член. Компилятор выдает мне ошибку только в заголовке.
Я знаю, что нестатическая функция-член требует, чтобы указатель ее объекта был первым аргументом, но ISO C++ запретил этот способ формирования указателя на член. функция. Они рекомендуют использовать &IRunnable::runTask. Я использую его для передачи компилятору.
Я действительно хочу знать, что runnable->runTask уже предоставил информацию Кто объект и < strong>какую функцию вы используете, почему мне нужно ввести указатель аргумента obj и использовать странный &IRunnable::runTask для ссылки на нестатическую функцию-член.
Один из возможных запретной причиной для меня является полиморфизм во время выполнения. Я думаю, что, возможно, C++ не может напрямую получить, на какую функцию вы ссылаетесь, только по типу указателя объекта, во время выполнения он решит запустить функцию-член по типу объекта, на который действительно указывает указатель. Так что адрес будет меняться динамически.
Я учусь на первом курсе CS, поэтому моя мысль может быть очень наивной. Я хочу получить ответы с точки зрения дизайна, спасибо!

Подробнее здесь: https://stackoverflow.com/questions/793 ... rm-a-point
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»