【发布时间】:2011-12-07 10:10:09
【问题描述】:
我正在将一个小型 C++ 库的一部分转换为 C (gcc)。在这样做时,我想将以下模板函数转换为宏(为便于阅读而删除了 cmets)。 CpuReadWriteFence() 是另一个我已经成功转换为宏的函数。
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 关键字。
-
没有 c1x。我将把这段代码链接到用 C 编写的更大的代码中。我真的不想为此引入 C++ 库。现在这里很少有 C++ 位。
标签: c++ c templates gcc equivalent