有沒有什麼方法可以用MSVC模擬inline namespace
?MSVC的內聯命名空間模擬(10.0/11.0)
LLVM的libc中++使用它來創建一個隱藏的版本命名空間,像這樣:
#define _LIBCPP_BEGIN_NAMESPACE_STD namespace std {inline namespace _LIBCPP_NAMESPACE {
#define _LIBCPP_END_NAMESPACE_STD } }
#define _VSTD std::_LIBCPP_NAMESPACE
namespace std {
inline namespace _LIBCPP_NAMESPACE {
}
}
並模擬它在GCC像這樣:
#define _LIBCPP_BEGIN_NAMESPACE_STD namespace std { namespace _LIBCPP_NAMESPACE {
#define _LIBCPP_END_NAMESPACE_STD } }
#define _VSTD std::_LIBCPP_NAMESPACE
namespace std {
namespace _LIBCPP_NAMESPACE {
}
using namespace _LIBCPP_NAMESPACE __attribute__((__strong__));
}
現在的問題是,我該如何實現相同的與MSVC?如果這是不可能的,我會很高興與省去了版本(現在)的解決方案,這是我的猜測是
#define _LIBCPP_BEGIN_NAMESPACE_STD namespace std {
#define _LIBCPP_END_NAMESPACE_STD }
#define _VSTD std
但那種失敗的目的...
你現在領先;)。實現基本相同的結果是一種不同的方法。 – rubenvb
我看到兩個可能的問題/缺點:1)這個編譯指示如何影響客戶端代碼?如何在客戶端代碼中使用此編譯指示來限制版本? 2)引入了內聯命名空間方法(我認爲)爲未來的ABI兼容性提供了一種手段,它將理想地保留舊的符號(儘管我可能會誤以爲這樣做似乎合乎邏輯)。我擔心這不足以達到這些目的,並且完全無法達到版本控制的目的。 – rubenvb
1)不確定你的意思。只要密鑰不同,您可以隨意使用編譯指示。鏈接器要求所有鍵值對匹配。 –