没有成员的类的惯用用法,只在构造时起作用

Idiom for class with no members which only does anything on construction?

本文关键字:起作用 用法 成员      更新时间:2023-10-16

我想要一个"什么都没有"的类,你不能"用它做任何事情",但是当它的一个实例被构造时,会发生一些有趣的事情。当然,我可以对它进行编码,比如

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() { }

以便在请求特定的元素时执行模板魔术。目前,除了在入侵有状态TMP时设置标志之外,我想不出任何其他方法来使其有用。