gpt4 book ai didi

c++ - 强制模板静态成员实例化

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:36:43 24 4
gpt4 key购买 nike

我正在尝试创建仅在模板被实例化时才执行某些代码的程序(它将用于低级驱动程序初始化)。现在我有以下解决方案。

class Initializer
{
public:
Initializer(){
// This code is executed once
}

void silly() const{

}
};

template <class T>
class Proxy{
protected:
static const Initializer init;
};

template<class T>
const Initializer Proxy<T>::init;

template<class T>
class MyTemplate : public Proxy<void>{
public:
static void myMethod1(){
init.silly();

// ... Something useful
}

static void myMethod2(){
init.silly();

// ... Something useful
}
};

Initializer 默认构造函数仅在我在某处调用 myMethod1()myMethod2() 时执行。

但是有没有办法摆脱那些 init.silly(); 行?

最佳答案

您的问题是,除非引用模板的成员,否则它们不会被实例化。

无需调用 init.silly(),您只需引用成员即可:

    static void myMethod1(){
(void)init;

// ... Something useful
}

或者,如果您希望绝对始终定义 init,您可以显式实例化它:

template<>
const Initializer Proxy<void>::init{};

关于c++ - 强制模板静态成员实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43799201/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com