簡體   English   中英

訪問具有相同名稱的不同結構

[英]Access to different struct with same name

我正在嘗試為Boost版本實現一種變通方法,該版本會導致在C ++ 11模式下鏈接的作用域枚舉出現問題:請參閱https://svn.boost.org/trac/boost/ticket/6779https:// 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM