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

标签 c++ templates static instantiation

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

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/

相关文章:

c++ - OpenCV - 缺少调试 DLL 库

c++ - 将普通功能更改为模板会产生任何正/负差异吗?

c# - 静态场的替代品

c++ - 递归(十进制到十六进制)C++

c++ - DLL 项目中的 C++ 编译错误

c++ - 在构造函数 C++ 中抛出异常

c++ - 反向模板别名

c++模板问题

c# - 如果不需要类成员,是否使用静态函数更好?

c++ - static 在这里的目的是什么?