TPCircularBuffer中的错误 - atomic_fetch_add

问题描述 投票:0回答:1

我正在尝试将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);
}
c++ ios swift atomic
1个回答
0
投票

基本问题是在Swift中没有atomic_fetch_add,所以你不能在一个桥接头中导入到Swift的.h文件中使用它。

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

© www.soinside.com 2019 - 2024. All rights reserved.