C++ 中的兼容层,用于从 C 访问模板函数

Compatibility layer in C++ to access template functions from C

我在使用现代 c++17 功能的模板可变参数函数中实现了一些代码。作为模板,它们在 .h 文件中实现。

// .H FILE
template <typename... T>
inline constexpr void foo(const T& ...values){
    // Do stuff
}

有没有办法创建一个允许用户从 C 访问此功能的兼容层?

我实际解决的方法不一定适用于所有特定情况!! 我发现尝试将参数直接传递给 c++ 可变参数函数是不可能的(据我所知)。相反,将传递一个 void 向量,结果将不是预期的结果。在这种情况下,将 c 输入字符串化,并将其传递给 c++ 函数就可以了。

#ifdef __cplusplus
extern "C" {
#endif
    void cfoo(const char * fmt, ...)
    {
        va_list args
        va_start(args, fmt);
        char str[1024];
        vsprintf(str, fmt, args);
        cpp::foo(str); // My c++ function
        va_end(args);
    }
#ifdef __cplusplus
}
#endif