반응형
가변 인자를 받는 함수에서 가변 인자들을 가변 인자를 받는 다른 함수를 호출할 때 ...를 생략할 때 발생할 수 있습니다.
에러가 발생하는 아래 예제 코드를 살펴보겠습니다.
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 ...);
}
반응형
'C++ 프로그래밍' 카테고리의 다른 글
C++ chrono system_clock과 steady_clock의 이해 및 차이점 (0) | 2021.11.10 |
---|---|
C/C++ __FUNCTION__, __FILE__의 유니코드 버전 (0) | 2021.11.01 |
C++ invoke_result: return type 알아내기 (0) | 2021.10.31 |
C++ static_assert (0) | 2021.10.30 |
C++ optional의 활용 (0) | 2021.10.24 |
C++에서 stderr로 출력하기 (0) | 2021.10.11 |
C++ wstring용 가변인자 포맷(format) 스트링 만들기 (0) | 2021.10.08 |
More C++ Idioms (0) | 2017.02.19 |