【发布时间】:2015-05-05 22:31:26
【问题描述】:
我的头文件中有以下声明:
extern "C" {
struct lfModifier {
template<typename T>
static void ModifyColor_Vignetting_PA (
void *data, float x, float y, T *rgb, int comp_role, int count);
}
}
GCC 可能正确地抱怨“错误:带有 C 链接的模板”。但模板毕竟是静态的。我可以很容易地将它从课堂上移到 cpp 文件中。我不喜欢这样做,因为将它放在结构中会增加代码的可读性。
有没有办法在这种情况下使用静态模板?
【问题讨论】:
-
即使这样也没有实际用处
-
你想通过具有 C 链接的 member 函数来完成什么?没有其他类的
extern C成员函数可以共享相同的名称? -
@Mondkin:它是关于 C++ 库的。我认为(我维护其他人的代码)目标是为 C 和 C++ 程序使用相同的库头文件。 C 程序可以看到
struct和属性,而 C++ 程序可以看到除了 C 链接之外的所有内容。好吧,然后,模板成员失败了。 -
你不能在头文件中包含这个,因为 C 不知道模板是什么。如果你使用
#define将它隐藏在 C 中,你就打破了单一定义规则。 -
@BenVoigt:它对 C 隐藏,
#ifdef __cplusplus。
标签: c++ class templates static linkage