如何解决将 C++ 入口点覆盖为类的 STATIC 方法
前言和问题
我目前正在学习 C++ 编程语言和游戏编程。 目前,我正在开发一个简单的游戏引擎,只是为了练习 API 的“一致性”和架构,因此出现了模仿 C#“程序”类的想法。
C# 入口点:
class Program
{
static void Main(string[] args)
{
// Do stuff.
}
}
需要 C++ 模拟:
class Program
{
public:
static void Main()
{
// Do stuff. 'args' analogue can be ignored,if necessary.
}
};
是否有可能以某种方式使用链接器选项将入口点重新定义为静态类方法?
相关经验和我对这个话题的理论
- 我认为这应该可行的主要原因在以下代码段中进行了描述(使用 mingw-w64 成功编译)。
#include <iostream>
class Main
{
public:
static void Foo() { std::cout << "Main::Foo\n"; }
};
void localFoo() { std::cout << "localFoo\n"; }
void callFunc(void(*funcToCall)())
{
funcToCall();
}
int main()
{
callFunc(localFoo);
callFunc(Main::Foo); // Proves that Main::Foo has the same interface as localFoo.
return 0;
}
- (指Win32 API)我将Win32 API 抽象为类,并使用窗口过程作为类的静态成员。 Win32 WNDCLASS 是绝对正确的,我什至可以在这个过程中使用我的类的静态成员。
我的结论:从技术上讲,静态字段和方法在全局变量和函数之间没有区别,因此,它们可以替换一些可以追溯到 C 的代码(默认入口点,用于示例)。
注意事项
解决方法
是否有可能以某种方式使用链接器选项将入口点重新定义为静态类方法?
没有。无论如何,如果您想使用 C++ 运行时库,则不会。 main
(或 WinMain
)在运行时库完成自身初始化后被调用,并且该调用在运行时库本身中进行了硬编码。
MSVC 链接器允许您使用 /ENTRY
开关 (see here) 指定替代入口点,但如果您这样做,您将绕过运行时库初始化代码,这会破坏事情。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。