C++ 프로그래밍

error C3520: 'args': 이 컨텍스트에서 매개 변수 팩을 확장해야 합니다.

하늘흐늘 2021. 10. 28. 14:18
반응형

가변 인자를 받는 함수에서 가변 인자들을 가변 인자를 받는 다른 함수를 호출할 때 ...를 생략할 때 발생할 수 있습니다.

에러가 발생하는 아래 예제 코드를 살펴보겠습니다.

template<typename ... arguments>
void thread_log_t(const std::wstring fmt, arguments ... args)
{
	wstring str = format_string(L"thread[%d]: ", std::this_thread::get_id());
	str += format_string(fmt, args ...);
	str += wend_line;

	wcout << str;
}

template<typename ... arguments>
void error_log_t(const std::wstring fmt, arguments ... args)
{
	wstring str = L"[error] " + fmt;
	thread_log(str, args);
}

int main(int argc, char* argv[])
{
	error_log_t(L"CoCreateInstance");
	error_log_t(L"CoCreateInstance %d", 1);

	return 0;
}

error C3520는 error_log_t 함수 안에서 thread_log(str, args); 부분에서 발생하였습니다. 발생 이유는 args를 제대로 넘기지 않았기 때문입니다. 해당 코드에서 args -> args ... 와 같이 가변 인자를 제대로 넘기면 에러가 해결됩니다. 가변 인자를 넘기기 위하여 ...가 추가되었다는 것에 주의바랍니다. 
  
해당 에러가 수정된 코드 예는 아래와 같습니다.

template<typename ... arguments>
void error_log_t(const std::wstring fmt, arguments ... args)
{
	wstring str = L"[error] " + fmt;
	thread_log(str, args ...);
}

 

반응형