2024. 7. 29. 23:05ㆍ프로그래밍 언어/C++
참고: https://en.cppreference.com/w/cpp/language/namespace
Namespaces - cppreference.com
Namespaces provide a method for preventing name conflicts in large projects. Entities declared inside a namespace block are placed in a namespace scope, which prevents them from being mistaken for identically-named entities in other scopes. Entities declar
en.cppreference.com
* inline namespace ns-name { declarations } (C++11부터 사용 가능)
- 인라인 네임스페이스는 외부에서 네임스페이스를 명시하지 않고도 접근할 수 있는 네임스페이스로 인라인 네임스페이스 안의 멤버들은 상위 네임스페이스의 멤버처럼 동작한다.
예시 (ChatGPT 생성):
이 예제에서는 버전을 지정하지 않으면 최신 버전(v2)의 foo를 사용하게 된다. inline namespace v2로 선언되어 있으므로 v2 namespace 안쪽의 선언이 myLib의 멤버처럼 동작하게 해주기 때문이다.
과거 버전인 v1을 사용하기 위해서는 myLib::v1::xxx 와 같이 명시적으로 과거 버전인 v1으로 명시해야 한다.
이렇게 활용하게 되면 새로운 기능을 기본으로 사용하게 해주면서 과거버전을 명시적으로 지정함으로써 버전관리에 용이하다.
namespace mylib {
inline namespace v2 {
void foo() {
// v2 implementation of foo
}
}
namespace v1 {
void foo() {
// v1 implementation of foo
}
}
}
int main() {
mylib::foo(); // Calls mylib::v2::foo()
mylib::v1::foo(); // Calls mylib::v1::foo()
return 0;
}
'프로그래밍 언어 > C++' 카테고리의 다른 글
Namespaces (using - namespace의 특정 맴버) (0) | 2024.08.03 |
---|---|
Namespaces (using) (0) | 2024.08.03 |
Namespaces (스코프) (0) | 2024.08.02 |
Namespaces (익명 네임스페이스) (0) | 2024.07.30 |
Namespaces (기본 네임스페이스) (0) | 2024.07.29 |