2017-12-22 9 views
0

私はSwiftプロジェクトにTPCircularBufferを統合しようとしています。 11.0/Xcodeの9私はTPCircularBuffer.hで次のエラー取得してい :TPCircularBufferのエラー - atomic_fetch_add

ファイルをドラッグし、私のプロジェクトにドロップした

「『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); 
} 

答えて

0

根本的な問題はatomic_fetch_addはスウィフトでは利用できないということですので、あなたは、ブリッジングヘッダーでスウィフトにインポートされ.hファイルでそれを使用することはできません。

atomic_fetch_addを呼び出すCでラッパー関数を記述し、そのラッパー関数を使用するようにTPCircularBuffer.hを変更する必要があります。ラッパー関数は.hファイルで宣言できますが、.cファイルに実装してSwiftコンパイラには公開されないようにする必要があります。

+0

これはすばらしい答えです。ラッパー関数の宣言と実装がどのように見えるかの例を表示したいと思うのだろうかと思います。 – BigSauce

関連する問題