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

Непрозрачное объявление перечисления – это объявление перечисления (с указанием имени и базового типа), в котором не перечисляются перечислители или их значения.
Это дает нам преимущество перечисления – строго типизированный целочисленный тип без семантики неявного преобразования (для перечислений с ограниченной областью видимости), без раскрытия имен перечислителей или их значений как части 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());
}
