当前位置:  开发笔记 > 编程语言 > 正文

全局命名空间的C++别名

如何解决《全局命名空间的C++别名》经验,为你挑选了1个好方法。

我使用Visual Studio在C++ for Windows中创建程序.我想知道编写Windows API函数(包括宏)的最佳方法是什么,就好像它们是命名空间的一部分,例如WinAPI.我曾经定义一个空的宏,所以预处理器删除它,只有::将留在代码中,这意味着全局范围:

#define WinAPI
BOOL bResult = WinAPI::SetWindowText( hwnd, L"Test Text" );

// After preprocessing:
BOOL bResult = ::SetWindowText( hwnd, L"Test Text" );

但是,我遇到了一些问题,比如ListBox_AddString; 而且我不认为我的解决方案很整洁.

我想首先看一下函数调用是否是Windows API的一部分,或者是我的一个具有类似名称的函数.是否存在以某种方式使用命名空间而不是空宏的解决方案?

更新

我试图实现Richard Hodges的提议(使用Visual Studio 2010):

namespace MyNamespace
{
    int APIENTRY wWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR szCmdLine, int iShowCmd )
//...
}

首先我收到LNK1561:必须定义入口点,所以我设置Project Properties> Linker> Linker> Advanced> Entry Point = MyNamespace :: wWinMain

然后我收到了LNK1221:一个子系统无法推断,必须定义,所以我设置项目属性>链接器>链接器>系统>子系统= Windows(/ SUBSYSTEM:WINDOWS)

现在它编译,链接和运行,但iShowCmd是0x7efde000(我无法解释的值)而不是通常的(SW_SHOW = 0x00000001).

怎么了?



1> Richard Hodg..:

我认为您会发现将所有应用程序的类和函数放在app命名空间中更有效率,并将全局命名空间视为属于"当前系统环境".

全局命名空间始终已被c库,windows,posix,OSX等污染.

你无法避免这种情况,因为没有只有c ++ API的操作系统.

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有