无论如何,在typeid禁用RTTI的情况下从GCC 获取编译时信息?在Visual Studio下const char* typeName = typeid(int).name();,即使禁用了RTTI ,一个简单的命令也会适当地返回"int".不幸的是,海湾合作委员会不能这样做.当我尝试在typeid没有RTTI的情况下打电话时,我的程序崩溃了.我知道禁用RTTI不是标准的一部分,但无论如何我是否可以强制GCC进行已知类型的编译时间分辨率?
出于性能原因,RTTI被禁用.我不需要运行时RTTI.
编辑:
这就是我最终的目标:
template<typename T> const char* TypeName(void);
template<typename T> const char* TypeName(T type) { return TypeName<T>(); }
#define REFLECTION_REGISTER_TYPE(type) \
template <> const char* TypeName<type>(void) { return #type; }
Run Code Online (Sandbox Code Playgroud)
它需要REFLECTION_REGISTER_TYPE为每个需要反射信息的类型调用.但只要它被称为每个必需的类型,调用TypeName<int>工作完美.我还添加了函数TypeName(T type),这意味着你可以做这样的事情:int x = 0; printf(TypeName(x));它将打印出"int".GCC应该能够像VC++一样在编译时实现这一点.
我正在使用一个使用DirectX的C项目,但我遇到了一个问题.某些DX调用需要一个IID对象,通常用__uuidof.这需要做的一件事是创建一个RenderTargetView.DirectX示例/教程执行此操作:
ID3D11Texture2D* pBackBuffer = NULL;
hr = g_pSwapChain->GetBuffer( 0, __uuidof( ID3D11Texture2D ), ( LPVOID* )&pBackBuffer );
Run Code Online (Sandbox Code Playgroud)
当我尝试调用__uuidof我的C代码时,我收到编译器错误:Error 19 error C4233: nonstandard extension used : '__uuidof' keyword only supported in C++, not C.DirectX有一个C接口,所以我想必须有办法做到这一点,但我不知道它会是什么.谁知道?
我正在编写一个当前在 Windows 和 Mac OS X 中运行的游戏。我的主游戏循环如下所示:
while(running)
{
ProcessOSMessages(); // Using Peek/Translate message in Win32
// and nextEventMatchingMask in Cocoa
GameUpdate();
GameRender();
}
Run Code Online (Sandbox Code Playgroud)
这显然简化了一点,但这就是它的要点。在我可以完全控制应用程序的 Windows 中,它运行良好。不幸的是,Apple 在 Cocoa 应用程序中有自己的处理方式。
当我第一次尝试在 Cocoa 中实现我的主循环时,我不知道把它放在哪里,所以我NSApplication根据这篇文章创建了我自己的。我GameFrame()在我的run功能中投入了我的权利,一切正常。
但是,我觉得这不是“正确”的方法。我想在 Apple 的生态系统中很好地发挥作用,而不是试图破解一个有效的解决方案。
这篇来自苹果的文章描述了使用 的旧方法NSTimer,以及使用CVDisplayLink. 我已经连接了这个CVDisplayLink版本,但它只是感觉......奇怪。我不喜欢我的游戏由显示器驱动而不是相反的想法。
我只有两个选项可以使用 aCVDisplayLink或覆盖我自己的NSApplication吗?这些解决方案中的任何一个都感觉不太对。
任何人都可以为多重应用程序推荐任何有关单元测试的好书.任何人都可以推荐可用于多线程测试的应用程序或实用程序,类似于java工具ConTest(我没有使用但朋友推荐)?
任何特别与多线程应用程序的C#单元测试相关的帮助都特别受欢迎.
谢谢.鲍勃.
architecture ×1
c ×1
c# ×1
c++ ×1
cocoa ×1
directx ×1
guid ×1
macos ×1
reflection ×1
unit-testing ×1
uuid ×1