[英]Access to different struct with same name
我正在嘗試為Boost版本實現一種變通方法,該版本會導致在C ++ 11模式下鏈接的作用域枚舉出現問題:請參閱https://svn.boost.org/trac/boost/ticket/6779和https:// svn .boost.org / trac / boost / ticket / 10038
問題很簡單:大多數預分布的boost libs公開(去除了命名空間):
detail::copy_file(path const&, path const&, copy_option::enum_type, error_code*)
但是C ++ 11編譯試圖找到:
detail::copy_file(path const&, path const&, copy_option, error_code*)
由於這一事實,C ++ 98 boost使用了模擬范圍的枚舉,而不是C ++ 11的枚舉。
我雖然可以為此編寫一個適配器,然后將其放入自己的目標文件並將其鏈接到程序中,但是我的幼稚方法失敗了:
#define copy_option native_copy_option__
#include <boost/filesystem/operations.hpp>
#undef copy_option
namespace boost {
namespace filesystem {
struct copy_option{
enum enum_type{none, fail_if_exists = none, overwrite_if_exists};
};
namespace detail {
void copy_file(const path& from, const path& to, copy_option::enum_type option, system::error_code* ec=0);
using copy_option = native_copy_option__;
void copy_file(const path& from, const path& to, copy_option option, system::error_code* ec)
{
copy_file(from, to, static_cast<boost::filesystem::copy_option::enum_type>(option), ec);
}
} // namespace detail
} // namespace filesystem
} // namespace boost
問題是:我需要在簽名中定義帶有C ++ 11枚舉的函數,而且還需要聲明具有相同名稱的帶有C ++ 98枚舉的函數。
這可能嗎?
我認為您應該只編寫可移植的代碼。
有條件地編譯該代碼的“競爭”變體只會引起ODR違反和偽造的ABI不兼容問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.