프로그래밍 언어2015. 3. 22. 17:22

이 글은 1999년 2월호 Embedded Systems Programming 이라는 잡지(?)에 실린 것으로 보이는 다음 링크의 글을 참고 한 것임. http://www.dansaks.com/articles/1999-02%20const%20T%20vs%20T%20const.pdf


요즘 C++로 코딩을 할 일이 좀 있어서, 이왕이면 C++11/14을 활용할 수 있으면 활용 해보자는 생각으로 노력하고 있는데, 사실 C++11/14에 대해서 잘 아는것도 아니고, Effective Modern C++을 공부하면서 알게 되는 것들이 대부분이다.


어쨌든 이 글은 C++11/14와는 전혀 관계가 없고, template programming을 하다가 발생한 문제를 해결하는 과정에서 발견한 문서를 보고, 깊은 감명(개탄과 좌절)을 받고 정리 해 두어야 할 것 같아서 작성하는 글이다.


역시나, 내가 많이많이 모르고 있었다는 사실을 느끼게 해 준 글이라는 것과 동시에, 학부시절(언제 였던가...;;) C++을 독학했던 나로서는, 어디에서도 이러한 설명은 들어본 적이 없다. 심지어 학부 C언어 수업에서 조차도...


사실 이 글의 내용은 C언어에 대한 설명이다. 정말 기본 중에 기본이라고 생각되는데, 어디에서도 제대로 가르쳐 준 곳이 없었다. 물론 이미 경험 해 보았거나, 정통한 분들은 다 잘 알고 있을 내용이지만... oTL



사족은 그만 두기로 하고, 원래의 문제를 설명 해 보자면 다음과 같다.

위의 코드에서 (1)과 같이 구현을 하면 아무런 문제가 없는데, (2)와 같이 구현을 하면 interface의 순수가상함수가 구현되지 않았다고 컴파일 에러가 발생하는 것이다.


나로서는 도대체 이해가 되지 않았다. 전혀 엉뚱한 template type deduction 문제가 아닌가 짐작했을 뿐...



그러다 이전에 수강했던 강사님께 문의를 해서 얻은 답은 const가 문제였던 것이다.


결론부터 말하자면, (2)와 같이 typedef를 이용하지 않고 구현하려면, 아래와 같이 정의/구현 해야 한다.

결론을 알고 나서도 멍 했다. 도대체 뭐지? C++ Template Complete Guide에서도 초반에 표기법에 대한 설명에서 나오긴 했었지만, 망각한지 오래이기도 하고 근본 개념(?)에 대해서는 설명이 없었다. (아마도 당연히 알고 있는 내용이라고 생각 했을지도...)



이제부터는 그 원리에 대해서, 참고자료를 이용하여 이해 해 볼 시간!


Posted by 세월의돌