상세 컨텐츠

본문 제목

[C++11] Inline namespaces

C++/Modern C++(11, 14, 17, 20)

by deulee 2023. 8. 24. 15:33

본문

`inline namespae`는 C++11부터 도입된 기능으로, 인라인 네임스페이스의 모든 멤버는 부모 네임스페이스의 일부인 것처럼 처리되어 '함수의 특수화'를 가능하게 한다.

 

이는 버전 관리 과정을 간편하게 해준다.

 

만약 A가 B를 포함하고 있고, B가 C를 포함하고 있고 B와 C가 모두 `inline namepsace`라고 가정할 때, C의 모든 멤버들은 A에 있는 것처럼 사용될 수 있다.

 

#include <iostream>

namespace Deulee {
	namespace V1 {
		void foo() {
			std::cout << "I'm V1's foo" << std::endl;
		}
	}
	inline namespace V2 {
		void foo() {
			std::cout << "I'm V2's foo" << std::endl;
		}
	}
}

int main(void)
{
	Deulee::foo(); // call V2's foo
	Deulee::V1::foo(); // call V1's foo
	return 0;
}

`Deulee::foo()`를 보면 특정 네임스페이스를 언급하지 않았음에도 불구하고 인라인 네임스페이스 `V2`안에 있는 `foo`함수를 호출한 것을 볼 수 있다.

관련글 더보기