Я хочу класс, который «ничего не имеет», и вы не можете «ничего с ним сделать», но при этом создается нечто интересное, когда создается его экземпляр. Теперь, конечно, я могу кодировать это, например, что-то вроде
class MyIdiom final {
MyIdiom() { /* magic goes here */ }
/* maybe unnecessary? */
MyIdiom(const MyIdiom&) = delete;
operator=(const MyIdiom& other) = delete;
}
но мне интересно, не существует ли какой-либо части какой-либо часто используемой библиотеки, наряду с другими такими «вырожденными классами».
Заметка: Поскольку люди, похоже, слишком озабочены использованием такого класса, предположим, что это что-то вроде
template <typename F> class MyIdiom final {
MyIdiom(F f) { f(); }
}
#define STATIC_BLOCK(_f) \
auto MyIdiom<decltype(_f)> _myidiom_ # _f # _ # __LINE__ (_f);
При условии, что ваш объект будет только делать что-то при создании и никогда не будет использоваться для чего-то еще, тогда вы можете в значительной степени просто заменить весь класс методом (т.е. void
) с теми же параметрами, что и конструктор. Я бы назвал это «ненужным осложнением».
С другой стороны, я полагаю, что во время компиляции может быть несколько применений в таких ситуациях, как …
template<some things happening here>
MyIdiom() { }
так что магия шаблона происходит, когда запрашивается этот конкретный ctor. На данный момент я не могу думать ни о чем, кроме установки флагов, когда взлом Stateful TMP чтобы сделать это полезным.