我正在尝试将TPCircularBuffer集成到我的Swift项目中。 11.0 / xcode 9
我在TPCircularBuffer.h中收到以下错误:



这些文件已拖放到我的项目中,但我没有做任何更改。我想知道我是否缺少旗帜或其他东西。还是有人知道为什么这对我不起作用?

#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);
}

最佳答案

根本问题是atomic_fetch_add在Swift中不可用,因此您不能在桥接头文件中导入到Swift的.h文件中使用它。

您需要在C中编写一个调用atomic_fetch_add的包装函数,并更改TPCircularBuffer.h以使用该包装函数。您可以在.h文件中声明包装函数,但必须在.c文件中实现该包装函数,这样它才不会在Swift编译器中公开。

09-07 06:24