除了这个问题How to pass template function with default arguments to std::call_once通过在使用函数指针时传递偶数默认参数来解决,但现在当我在实际代码中尝试此解决方案时,我发现它不起作用,因为还有一个重载函数:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
因此在std :: call_once
中使用重载函数时有任何特殊规则答案 0 :(得分:2)
您可以使用static_cast<>()
指定您所指的过载。例如,
std::call_once(flag,
static_cast<int (*)(std::unique_ptr<T>&, unsigned int)>(
&LifeTrackerHelper::SetLongevity<T>),
std::ref(ptr), 0);
您也可以使用临时变量获得相同的效果。
int (*initfn)(std::unique_ptr<T>&, unsigned int) =
&LifeTrackerHelper::SetLongevity<T>;
std::call_once(flag, initfn, std::ref(ptr), 0);