Как запретить инициализацию пустого списка?
У меня есть класс, в котором нет участников. И поэтому он не предназначен для реализации. Итак, я удалил по умолчанию кр. Это запрещает любую конструкцию, кроме инициализации списка. Есть ли способ это тоже запретить?
class Empty{
//No non-static data members
Empty()=delete;
};
Empty A{};// is allowed
Empty A ={};//is allowed too
//Empty A; ok, forbidden
//Empty A=Empty(); ok, forbidden
1 ответ
Empty A{};
работает потому что Empty
это совокупность. Простого удаления конструктора по умолчанию недостаточно, чтобы предотвратить его объединение.
Самый простой способ сделать это - дать ему приватный член типа char
так что размер шрифта не изменится. Кроме того, вы можете дать ему частный конструктор по умолчанию, который не = default
редактор
Однако тот факт, что тип не предназначен для использования в объекте, не означает, что вам следует проявлять особую осторожность, чтобы не допустить этого. std::enable_if<blah>
также является типом, и объекты этого типа не предназначены для конструирования. Но вы все еще можете сделать это.
Вы не должны предпринимать эти шаги, если нет подлинной проблемы, которая может быть вызвана тем, что пользователь создает объект этого типа.