Предположим, что есть класс Foo
что я, как разработчик библиотеки, не хочу, чтобы мои пользователи могли создавать более n
количество раз (где n
не обязательно 1
).
Есть ли способ обеспечить соблюдение этого правила во время компиляции?
Обратите внимание, что я не придерживаюсь модели Singleton или аналогичной модели, поскольку я хотел бы, чтобы пользователи поняли, что им не следует создавать экземпляр класса, до выполняет их код.
До сих пор моей лучшей попыткой была комбинация static_assert
и __COUNTER__
макрос, но безрезультатно, поскольку они, кажется, не оцениваются, как я ожидал, внутри функций или классов.
constexpr int bar()
{
static_assert( __COUNTER__ < 5, "You called this too many times!");
return 0;
}
Нет. Даже если оставить в стороне тот факт, что одна функция, создающая один экземпляр, может вызываться несколько раз или что создание экземпляра может происходить в цикле или шаблоне, ничто не может остановить создание экземпляра в другом блок перевода.
Других решений пока нет …