Передача статического метода в качестве аргумента, оператор адреса не требуется? - PullRequest
3 голосов
/ 14 октября 2011
class ThreadWorker
{
public:
    ThreadWorker(void);
    virtual ~ThreadWorker(void);

    static void DoSomething();
};


int main()
{
    boost::thread thread1(ThreadWorker::DoSomething);
    boost::thread thread2(ThreadWorker::DoSomething);
    boost::thread thread3(&ThreadWorker::DoSomething);
}

Я играю с Boost.Thread, и я замечаю, что не кажется важным для меня, использую ли я адрес оператора (&) или нет при передаче статической функции-члена какАргумент.Это не имеет значения?А если нет, то почему?Один способ более правильный, чем другой?

1 Ответ

7 голосов
/ 14 октября 2011

Это эффективно не имеет значения.Функции (свободные функции и статические функции-члены, а не нестатические функции-члены) распадаются на указатели функций.Нет более правильного способа, чем другой, хотя я предпочитаю явный.

C ++ 11 Standard, 4.3 / 1:

AnЗначение типа T может быть преобразовано в значение типа «указатель на T». Результатом является указатель на функцию.

C ++ 11 Standard, 5.2.2 /1 - вызов функции:

Существует два вида вызова функции: обычный вызов функции и вызов функции-члена.Статическая функция-член - это обычная функция.

...