访问具有相同名称的不同结构
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库暴露(名称空间剥离):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不兼容问题。
相关文章:
- 通过方法访问结构
- 使用不带参数的函数访问结构元素
- 访问存储在向量C++中的结构的多态成员
- 访问类lintalizer列表中的结构元素
- 仅使用结构名称访问结构成员
- 如何从其他结构访问受保护的结构变量
- 如何从类中定义的结构访问私有成员?c++
- 枚举范围无法通过 C++ 中的类中的结构访问
- 通过更高级别的结构访问子变量
- 从匿名结构访问枚举条目
- 如何定义别名以通过结构访问枚举类成员
- C 用于向量中的结构访问索引或使用参考值
- 奇怪的结构访问错误
- 将数组作为结构访问与未定义的行为
- 使用c++以及x86和x64体系结构访问处理器中断
- 使用 ostream 从另一个类的结构访问数据
- 从结构访问数组会使程序崩溃
- 联合中的C++结构访问联合成员
- SWIG如何使用Lua表从Lua中的c结构访问字节数组
- c++结构访问冲突