c++ - C++ 静态模板函数可以在具有 C 链接的结构中吗?

标签 c++ class templates static linkage

我的头文件中有以下声明:

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 链接,模板函数可以具有 C++ 链接。

extern "C" {
    struct lfModifier {
        int val;
        void foo();

        extern "C++" template<typename T>
        static void ModifyColor_Vignetting_PA (
           void *data, float x, float y, T *rgb, int comp_role, int count);
    }
}

结构成员的

extern C++ 将覆盖结构的 extern C 属性。

关于c++ - C++ 静态模板函数可以在具有 C 链接的结构中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28862878/

相关文章:

java - 是否可以在运行时检索用于类型标记的泛型类型(即 Class<T>)?

c++ - 包装 Eigen 的张量类以创建动态秩张量?

c++ - FBX SDK 骨骼动画

c++ - 估算边绘图的平均边厚

python - 对非类属性使用 Python 的 __get__ 描述符

jQuery 在多个类之间切换Class()

c++ - 在 std::thread 中使用 std::move

c++ - 逐字读取多个空格的文件c++

javascript - 在 Meteor 的 onRendered 中获取模板变量

c++ - 在编译时获取 `std::initializer_list` 的大小