3
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 をいじっていますが、静的メンバー関数を引数として渡すときに、演算子 (&) のアドレスを使用するかどうかは問題ではないように思われます。それは問題ではありませんか?そうでない場合、なぜですか?ある方法は他の方法よりも正しいですか?

4

1 に答える 1

7

それは事実上問題ではありません。関数 (非静的メンバー関数ではなく、フリー関数と静的メンバー関数) は関数ポインターに崩壊します。他の方法よりも正しい方法はありませんが、私はたまたま明示的な方法を好みます。

C++11 標準、4.3/1:

関数型 T の左辺値は、「T へのポインター」型の prvalue に変換できます。結果は関数へのポインタです。

C++11 標準、5.2.2/1 - 関数呼び出し:

関数呼び出しには、通常の関数呼び出しとメンバー関数呼び出しの 2 種類があります。静的メンバ関数は通常の関数です。

于 2011-10-13T23:20:25.103 に答える