我正在尝试将TPCircularBuffer集成到我的Swift项目中。 11.0 / xcode 9我在TPCircularBuffer.h中收到以下错误:
“没有用于调用'atomic_fetch_add'的匹配函数”
文件被拖放到我的项目中,我没有做任何更改。我想知道我是否错过了旗帜或其他东西。或者有谁知道为什么这对我不起作用?
#ifdef __cplusplus
extern "C++" {
#include <atomic>
typedef std::atomic_int atomicInt;
#define atomicFetchAdd(a,b) std::atomic_fetch_add(a,b)
}
#else
#include <stdatomic.h>
typedef atomic_int atomicInt;
#define atomicFetchAdd(a,b) atomic_fetch_add(a,b)
#endif
static __inline__ __attribute__((always_inline)) void TPCircularBufferConsume(TPCircularBuffer *buffer, uint32_t amount) {
buffer->tail = (buffer->tail + amount) % buffer->length;
if ( buffer->atomic ) {
atomicFetchAdd(&buffer->fillCount, -amount);
} else {
buffer->fillCount -= amount;
}
assert(buffer->fillCount >= 0);
}
基本问题是在Swift中没有atomic_fetch_add
,所以你不能在一个桥接头中导入到Swift的.h
文件中使用它。
您需要在C中编写一个调用atomic_fetch_add
的包装函数,并更改TPCircularBuffer.h
以使用该包装函数。您可以在.h
文件中声明包装器函数,但必须在.c
文件中实现它,因此它不会暴露给Swift编译器。