[C++] 이름공간으로 분리된 함수의 선언/정의가 가능한가요?
글쓴이: gurumong / 작성시간: 토, 2010/05/08 - 3:52오후
C++을 공부하고 있습니다
네임스페이스를 공부하면서 머리속이 많이 복잡해지는데요
표준에서 아래와 같이 함수의 선언과 정의가 서로 다른 이름공간으로 분리되어 사용되는것도 가능한가요?
// module.h
namespace A
{
extern int var;
int func(void); //네임스페이스A에서 함수선언
}// module.cpp
#include "module.h"
int var = 10;
namespace B
{
using namespace A; //using 지시어로 네임스페이스A 사용
int func(void) //네임스페이스B에서 함수정의
{
return ++var;
}
}// main.cpp
#include "module.h"
using namespace A;
int main(void)
{
func(); //네임스페이스A에서 선언되고, 네임스페이스B에서 정의된 함수 사용
}Forums:


뭘 원하시는지 모르겠네요.
해봤더니 안 되는군요.
아마도
선언과 정의가 각각 다른 namespace 에서 define 되어도 가능한지 테스트해 보실려는 것 같은데요.
그런게 가능하지는 않을 것 같네요. 그런게 가능하다면 COM 같은게 나오지 않았겠죠.
COM과 무슨 상관이 있죠?
COM을 몰라서...
// module.cpp#include
// module.cpp #include "module.h" int var = 10; namespace B { } int A::func(void) //A 보다 상위 scope의 namespace에서 A 의 함수정의 ( 이경우는 global ) { return ++::var; }로 작성하면 됩니다. 같은 level의 다른 namespace scope 안에서는 일단 안되는 걸로 알 고 있습니다. 하나 상위 레벨 namescope 에선 대체적으로 문제 없었습니다.
Neogeo - Future is Now.
Neogeo - Future is Now.
이런 방식으로 확인해봤습니다.
//이런게 나은거 같습니다.
- namespace 안에 namespace 보다는 class와 상속을 사용하는 방식
- COM GUID가 namespace 역할.을 하나봅니다. 이것은 AFX의 GUID와도 연관되어 보입니다.
http://social.msdn.microsoft.com/Forums/en-US/vclanguage/thread/c8aea791-0926-4fbd-a4c5-a658cd0a9b1b
http://www.hanb.co.kr/ebook/look.html?src=email&kw=0000BA&ACENO=7&isbn=9788979149456
http://msdn.microsoft.com/en-us/library/h627s4zy.aspx
http://stackoverflow.com/questions/5978981/c-namespace-versioning
http://stackoverflow.com/questions/5966647/c-namespace-question
http://snslab.kangwon.ac.kr/home/?bo_table=openclass&doc=bbs/gnuboard.php&wr_id=59
// main.cpp #include "module.h" int main(void) { A::n1 = 4; B::n1 = 3; A::func(30); B::func(40); return 0; } // module.cpp #include <stdio.h> #include "module.h" using namespace A; using namespace B; int var = 10; // int A::var = 5; int B::var = 15; int __cdecl A::func(int a) { printf("A::fn\n"); printf("var : %d\n", var); printf("A::var : %d\n", A::var); printf("B::var : %d\n", B::var); printf("a : %d\n", a); printf("n1 : %d\n", n1); printf("::var : %d\n", ::var); printf("\n"); ++B::var; return ++var; } int __cdecl B::func(int a) { printf("B::fn\n"); printf("var : %d\n", var); printf("A::var : %d\n", A::var); printf("B::var : %d\n", B::var); printf("a : %d\n", a); printf("n1 : %d\n", n1); printf("::var : %d\n", ::var); return ++A::var; } // module.h namespace A { extern int var; static int n1; int __cdecl func(int a); } namespace B { extern int var; static int n1; int __cdecl func(int a); }----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
댓글 달기