2016-12-09 2 views
0

を使用してのコードのセットの1時間実行のためのC++でのより良い方法はありますC++ 11。 1つのタイムコードをC++ 11のlambdaやstd :: onceの機能やその他のものに置き換えるより良い方法はありますか?ではなく、私は1時間の初期化のためのコードを持っている多くの場所では、静的変数のチェック

+1

http://stackoverflow.com/questions/4173384/how-to-make-sure-a-function-is-only-called-once私は第二の答えも良いと思います。 – Yves

答えて

1

はい - std::call_once、これを使用する方法についてのドキュメントを参照してください。http://en.cppreference.com/w/cpp/thread/call_once

+0

std :: call_onceの使用静的変数std :: once_flagの代わりに、同様の実装があります。 std :: once_flagフラグ; void testMethod2() { std :: cout << __PRETTY_FUNCTION__ << std :: endl; } int main() { std :: call_once(flag、testMethod2); std :: call_once(flag、testMethod2); return 0; } – rameshrgtvl

+0

はい - あなたのアプローチとは異なり - スレッドセーフです... – Nim

1

あなたは、静的な関数呼び出しにあなたの行動をカプセル化またはC++ 11のラムダで直後に呼び出された関数式のようなものを使用することができます。

int action() { /*...*/ } 
... 
static int temp = action(); 

それぞれ

static auto temp = [](){ /*...*/ }(); 

はい、最も一般的な解決策はstd::call_onceを使用することですが、時には少し余計になります(特別なフラグを使用して最初の質問に戻ってください)。

C++ 11標準では、これらのアプローチはすべてスレッドセーフです(変数は一度「原子的に」初期化されます)。ただし、共有リソースがここで使用されている場合は、action内のレースを回避する必要があります。

関連する問題