2017-12-22 17 views
0

TPCircularBuffer를 Swift 프로젝트에 통합하려고합니다. 11.0/엑스 코드 (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