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

时间:2012-09-07 08:05:10

标签: c++ stl typedef atomic visual-c++-2012

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

error C2011: 'std::memory_order' : 'enum' type redefinition 
(D:\_work\wp-test\lib\Item.cpp) d:\_work\wp-test\lib\system\Atomic.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 1中未实现的一个功能缺失,另一个功能无法转换参数

error C2039: 'compare_swap' : is not a member of 'std::atomic_int'
D:\_work\wp-test\lib\network\ConnectionSocket.cpp

error C2664: 'std::atomic_int::atomic_int(const std::atomic_int &)' : 
cannot convert parameter 1 from 'int' to 'const std::atomic_int &' 
(D:\_work\wp-test\lib\Item.cpp) D:\_work\wp-test\lib\system\Cache.h

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

1 个答案:

答案 0 :(得分:1)

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

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