扩展typedef结构(与VC++11兼容)

Extending typedef struct (compatibility with VC++11)

本文关键字:VC++11 兼容 typedef 结构 扩展      更新时间:2023-10-16

我正在开发一个项目,该项目是用Visual C++编译器2010(和2008)编写的。我正在尝试使用新的VC++11,但我对已经实现的函数有问题。我们已经实现了typdef struct-atomic_intmemory_order,但它们在VC 11中添加了几乎相同的函数,我得到了这些错误

error C2011: 'std::memory_order' : 'enum' type redefinition 
(D:_workwp-testlibItem.cpp) d:_workwp-testlibsystemAtomic.h

如果我发现我们在#If statment 中的实现

#if _MSC_VER >= 1700
#include <atomic>
#else
//out implementation
namspace std{
  typedef enum memory_order
  {
   memory_order_relaxed,
   ...
  } memory_order;
  typedef struct atomic_int{
   ...
  }
}
#endif

这似乎有效,但缺少一个未在VC 11中实现的函数,另一个函数无法转换参数

error C2039: 'compare_swap' : is not a member of 'std::atomic_int'
D:_workwp-testlibnetworkConnectionSocket.cpp
error C2664: 'std::atomic_int::atomic_int(const std::atomic_int &)' : 
cannot convert parameter 1 from 'int' to 'const std::atomic_int &' 
(D:_workwp-testlibItem.cpp) D:_workwp-testlibsystemCache.h

请帮我找到一些解决方案。。。如何从VC++11中覆盖整个atomic_int,或者如何将memeber添加到?感谢

因此compare_swap函数是中std::atomic_compare_exchange_weak/strong的旧草案名称。它已经在C++11中实现了,但我们使用了旧名称。

另一个错误C2664也是旧草稿的问题(缺少重载加载方法)。