目前我正在开发一个 C++ 项目,我计划在其中嵌入 Lua 脚本。出于这个原因,某些类需要导出到 Lua,我想让这更方便,因此我创建了一个模板类:
template <class T>
class ExportToLua {
public:
ExportToLua() {}
~ExportToLua() {}
private:
static int m_registered;
};
template <class T> int ExportToLua<T>::m_registered = T::exportToLua();
现在每个需要导出的类都派生自ExportToLua<T>
= T
"要导出的类"。例子:
class Example: public ExportToLua<Example> {
public:
Example();
virtual ~Example();
static int exportToLua();
private:
};
whereExample
的静态成员函数exportToLua()
包含特定于类的注册代码。我的理解是,每个编译单元都存在一个静态成员变量的实例ExportToLua<T>::m_registered
——即每个T
.
但是当我启动我的程序时,注册码永远不会被调用。例如在 example.cpp 中:
int Example::exportToLua() {
std::cout << "int Example::exportToLua()" << std::endl;
return -2;
}
但是,当我运行我的程序时,我从未看到此消息。
知道为什么吗?编译器是否对静态变量进行了一些“优化” m_registered
,因为我没有在任何地方使用它?
感谢您的输入,
最好的,克里斯托夫