작은 C++ 라이브러리의 일부를 C (gcc)로 변환하고 있습니다. 그렇게하면 다음 템플릿 함수를 매크로 (주석을 위해 제거 된 주석)로 변환하려고합니다. CpuReadWriteFence()는 매크로로 성공적으로 변환 한 또 다른 함수입니다.어떻게이 C++ 템플릿 함수를 C 대안으로 변환 할 수 있습니까?
template<typename T>
static inline T AtomicLoadAcquire(T const* addr)
{
T v = *const_cast<T const volatile*>(addr);
CpuReadWriteFence();
return v;
}
C에 템플릿이 없으므로 함수 또는 매크로를 사용하고 있습니다. GCC는 편리한 유형 확장자 인 을 제공합니다. 아마도 나는 void *로 그것을 할 수 있을까? 그렇다면 어떻게? 그 날이 작업을 수행하도록 허용하지 않습니다, 그러나
#define AtomicLoadAcquire(addr) \
({ typeof (addr) v = *(volatile typeof (addr) *)(addr); CpuReadWriteFence(); })
:
int x = AtomicStoreRelease(&bla);
가 어떻게이 문제를 해결 얻을 것
내가 지금까지 가지고하는 것은 이것이다?
궁금합니다. 왜 C++에서 C로 변환하고 있습니까?참고로 컴파일러가 C1x 기능을 지원하는 경우 [_Generic] (http://en.wikipedia.org/wiki/C1x) 키워드를 사용할 수 있습니다. – iammilind
c1x가 없습니다. 나는이 코드를 C로 작성된 더 큰 무언가에 링크하려고합니다. 실제로 C++ 라이브러리를 끌어 들이고 싶지는 않습니다. 지금이 비트는 C++입니다. – Matt