Daily bit(e) C++. Встроенные пространства имен

Добавлено 18 сентября 2026 в 05:14

Daily bit(e) C++ 109, инструмент версионирования символов в C++11 – встроенные (inline) пространства имен.

Daily bit(e) C++

Встроенные (inline) пространства имен в C++11 невидимы для кода, но влияют на имена символов.

Благодаря этому они служат отличным инструментом для версионирования символов при внесении изменений, нарушающих ABI.

#pragma once
// library.h

// Реализация Library:

// Более старые версии можно сохранить (по возможности),
// обеспечив тем самым бинарную совместимость.
// Если же их удалить, то компиляция с использованием старого
// заголовочного файла и новой бинарной версии приведет к ошибке линковки.
namespace Library 
{
    namespace v1 
    {
        void function() 
        {
            std::cout << "Hello World! v1\n";
        }
    }
    inline namespace v2 
    {
        void function() 
        {
            std::cout << "Hello World! v2\n";
        }
    }
}
// main.cpp
#include <iostream>

#include "library.h"

int main() {
    Library::function(); // Будет использовать Library::v2::function();
    // напечатает: "Hello World! v2"

    Library::v1::function();
    // напечатает: "Hello World! v1"
}

Пример на Compiler Explorer

Теги

C++ / CppDaily bit(e) C++Программирование