Идиома для класса без участников, который только делает что-нибудь на строительстве?

Я хочу класс, который «ничего не имеет», и вы не можете «ничего с ним сделать», но при этом создается нечто интересное, когда создается его экземпляр. Теперь, конечно, я могу кодировать это, например, что-то вроде

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);

-1

Решение

При условии, что ваш объект будет только делать что-то при создании и никогда не будет использоваться для чего-то еще, тогда вы можете в значительной степени просто заменить весь класс методом (т.е. void) с теми же параметрами, что и конструктор. Я бы назвал это «ненужным осложнением».

С другой стороны, я полагаю, что во время компиляции может быть несколько применений в таких ситуациях, как …

template<some things happening here>
MyIdiom() { }

так что магия шаблона происходит, когда запрашивается этот конкретный ctor. На данный момент я не могу думать ни о чем, кроме установки флагов, когда взлом Stateful TMP чтобы сделать это полезным.

4

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


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