Можно ли ограничить количество экземпляров класса во время компиляции? - PullRequest
0 голосов
/ 13 октября 2018

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

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

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

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

1 Ответ

0 голосов
/ 13 октября 2018

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

...