C++에서 (void*) type 말고 casting용으로 뭘 써야 하나요?
글쓴이: aeronova / 작성시간: 토, 2006/08/12 - 12:12오전
안녕하세요,
제가 다음과 같은 마지막 인자만 다른 두 가지 함수가 있습니다.
void printMSG(const char* msg1, const int& msg2) { std::cout << msg1 << " : " << msg2 << std::endl; } void printMSG(const char* msg1, const double& msg2) { std::cout << msg1 << " : " << msg2 << std::endl; }
근데 생각해보니 인자에 따라 두가지 함수를 각각 정의하는 것보다 casting을 이용하면 하나의 함수를 사용할 수 있지 않을까 하는 생각에 마지막 인자를 (void*)로 type을 정의하니 C++에서는 금지되었다면서 에러가 나더군요. 음.. 그러면 (void*) type말고 다른 것이 있나요? 아니면 C++에서는 explicit type을 선호해서 아예 되지 않는지요?
Forums:
함수인자로 정의하는 것은 문제가 아니지만...
함수인자로 정의하는 것은 문제가 아니지만...
함수내부에서 std::cout가 그 변수를
어떤 자료형으로 처리해야 할지 알 수 없으니 에러가 날듯 싶군요.
[code]#include using
--
Passion is like genius; a miracle.
--
Passion is like genius; a miracle.
앗, template이란
앗, template이란 막강한 녀석을 깜빡했네요. :)
감사합니다.
... 그런데 파일을 debug.h, debug.cpp, debugTest.cpp로 쪼개니 이상하게 undefined reference 에러가 납니다.ㅜㅜ
한 파일안에 있을때는 되고, 왜 쪼개니 안될까요?
debug.h
debug.cpp
debugTest.cpp
컴파일은 다음처럼 했습니다.
그러니 다음과 같은 에러가 납니다. -D__DEBUG__ 옵션을 주어도 마찬가지구요.
휴... 생각보다 쉽지 않네요. :(
It's better to burn out than to fade away. -- Kurt Cobain.
template의 구현
template으로 작성할때는 정의와 구현을 구분하지 않고 구현 내용도 .h에 넣어줍니다.
실제 코드가 아니고 코드를 만드는 코드기 때문에 .h에 넣습니다.
debug.cpp에 나오는 template 함수들을 debug.h로 옮겨줍니다.
감사합니다. 머리 좀
감사합니다. 머리 좀 식히고 googling 해보니 C++ FAQ에 잘 설명 되어 있군요.
http://www.parashift.com/c++-faq-lite/templates.html#faq-35.12
http://www.parashift.com/c++-faq-lite/templates.html#faq-35.13
http://www.parashift.com/c++-faq-lite/templates.html#faq-35.14
요지는 말씀하신대로 *.h에 definition을 넣어주거나 (간단하지만 코드가 커질 우려가 있음), 아니면 *.cpp에 사용할 type을 일일이 적어줄것, 이렇게 2가지 방도가 있네요.
It's better to burn out than to fade away. -- Kurt Cobain.
댓글 달기