0

我正在开发一个使用 Visual C++ 编译器 2010(和 2008)编写并使用的项目。我正在尝试使用新的 VC++11,但我对已经实现的功能有疑问。我们已经实现了 typdef struct atomic_intmemory_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 语句中

#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:\_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 添加到?谢谢

4

1 回答 1

1

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

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

于 2012-09-07T12:46:32.577 回答