以下代码段是取自cpprest中的一段代码,
其中巧妙的地方:静态变量、非静态变量和std::call_once的结合使用。
第一次接口被调用,以下每一行代码都被执行,std::once_flag of被置位。
之后的调用,因为of为静态变量,第一次调用时将其置位,第二次调用就不会执行其中的执行函数。
对于是否为第一次调用,通过std::pair的first成员值来体现。
std::pair<bool, platform_shared_threadpool*> initialize_shared_threadpool(size_t num_threads)
{
static uninitialized<platform_shared_threadpool> uninit_threadpool;
bool initialized_this_time = false;
static std::once_flag of;
std::call_once(of, [num_threads, &initialized_this_time] {
uninit_threadpool.construct(num_threads);
initialized_this_time = true;
});
return
{
initialized_this_time,
&uninit_threadpool.storage
};
}