Можно ли ограничить количество экземпляров класса во время компиляции?

Предположим, что есть класс Foo что я, как разработчик библиотеки, не хочу, чтобы мои пользователи могли создавать более n количество раз (где n не обязательно 1).
Есть ли способ обеспечить соблюдение этого правила во время компиляции?

Обратите внимание, что я не придерживаюсь модели Singleton или аналогичной модели, поскольку я хотел бы, чтобы пользователи поняли, что им не следует создавать экземпляр класса, до выполняет их код.

До сих пор моей лучшей попыткой была комбинация static_assert и __COUNTER__ макрос, но безрезультатно, поскольку они, кажется, не оцениваются, как я ожидал, внутри функций или классов.

constexpr int bar()
{
static_assert( __COUNTER__ < 5, "You called this too many times!");
return 0;
}

1

Решение

Нет. Даже если оставить в стороне тот факт, что одна функция, создающая один экземпляр, может вызываться несколько раз или что создание экземпляра может происходить в цикле или шаблоне, ничто не может остановить создание экземпляра в другом блок перевода.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]