Namespaces (인라인 네임스페이스)

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