Daily bit(e) C++. Непрозрачное объявление перечислений

Добавлено 5 августа 2026 в 09:03

Daily bit(e) C++ 59, скрытие перечислителей из общедоступного API с помощью непрозрачного объявления enum.

Daily bit(e) C++

Непрозрачное объявление перечисления – это объявление перечисления (с указанием имени и базового типа), в котором не перечисляются перечислители или их значения.

Это дает нам преимущество перечисления – строго типизированный целочисленный тип без семантики неявного преобразования (для перечислений с ограниченной областью видимости), без раскрытия имен перечислителей или их значений как части API.

////////////
// library.h
#include <cstdint>

// Непрозрачное объявление
enum class Fruit : uint32_t;
// Перечисление без области видимости тоже будет работать,
// но базовый тип всегда должен быть указан.

// Мы можем использовать Fruit в API без предоставления перечислителей.
Fruit get_apple();
Fruit get_banana();
void function(Fruit);
/////////////
// library.cc
#include "library.h"
#include <print>

// Объявление с перечислителями
enum class Fruit : uint32_t {
    Apple,
    Banana
};

// Доступ к перечислителям есть только у реализации
Fruit get_apple() 
{
    return Fruit::Apple;
}

Fruit get_banana() 
{
    return Fruit::Banana;
}

void function(Fruit c) 
{
    switch (c) 
    {
        case Fruit::Apple:
            std::println("Called with \"Apple\" enumerator.");
            break;
        case Fruit::Banana:
            std::println("Called with \"Banana\" enumerator.");
         break;
    }
}
///////////
// main.cpp
#include "library.h"

int main() {
    function(get_apple());
    function(get_banana());
}

Пример на Compiler Explorer

Теги

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