C++ 在使用第三方c+时避免宏中的冲突+;图书馆

C++ 在使用第三方c+时避免宏中的冲突+;图书馆,c++,macros,typedef,casablanca,C++,Macros,Typedef,Casablanca,我正在尝试使用卡萨布兰卡,http服务器。为此,我需要包含来自Casablanca的Header文件,其中包含的宏和typedef很少会在我的项目中引起问题 所以我的文件看起来像这样 simplehttpserver.h #include "cpprest/json.h" #include "cpprest/http_listener.h" #include "cpprest/uri.h" #include "cpprest/asyncrt_utils.h" SimpleHttpServer

我正在尝试使用卡萨布兰卡,http服务器。为此,我需要包含来自Casablanca的Header文件,其中包含的宏和typedef很少会在我的项目中引起问题

所以我的文件看起来像这样

simplehttpserver.h

#include "cpprest/json.h"
#include "cpprest/http_listener.h"
#include "cpprest/uri.h"
#include "cpprest/asyncrt_utils.h"


SimpleHttpServer {

SimpleHttpServer(utility::string_t, std::function<void(http_request)> &request_handler); 

void OnInitialize();

void StartServer();
void StopServer();

private: 
 std::unique_ptr<http_listener> m_listenerUptr;
 // Handlers
 std::function<void(http::http_request)> m_all_requests;

 pplx::task<void> open() { return m_listenerUptr->open(); }
 pplx::task<void> close() { return m_listenerUptr->close(); }


 // SimpleHttpServer http_server_;
 utility::string_t address_;  

}
这会导致预编译到我的项目中的所有卡萨布兰卡头文件与我的项目中的宏和typedef冲突。 e、 g.uu declspec

我不想更改我的宏,因为这将是大量的代码更改。我不想更改卡萨布兰卡头文件,因为这也会导致长期维护开销

我确信,这在C++中一定是很常见的问题,有人能帮我解决这个问题吗?


提前谢谢

名称空间的发明正是为了解决这个问题。如果“卡萨布兰卡污染全局名称空间”是垃圾,您只需要使用不同的库。此外,使用宏的库应该使用几乎不可能与任何其他名称冲突的名称。例如,
CASABLANCA\u MIN\u值
而不仅仅是
MIN
。而且
\uu declspec
是由Microsoft header定义的,不是吗?您的代码和第三方库都不应该
\define\uu declspec
。它是一个保留的标识符。使用C++你有很多选择来避免第一个地方的宏,我认为这是图书馆使用“易于复制”宏名称的错误,以及你的个人宏使用“易于复制”的名字。名称空间的发明正是为了解决这个问题。如果“卡萨布兰卡污染全局名称空间”是垃圾,您只需要使用不同的库。此外,使用宏的库应该使用几乎不可能与任何其他名称冲突的名称。例如,
CASABLANCA\u MIN\u值
而不仅仅是
MIN
。而且
\uu declspec
是由Microsoft header定义的,不是吗?您的代码和第三方库都不应该
\define\uu declspec
。它是一个保留的标识符。使用C++你有很多选择来避免第一个地方的宏,我认为这是图书馆使用“易于复制”宏名称的错误,以及你的个人宏使用“易于复制”的名字。那永远不会有好结果。
#include "simplehttpserver.h"