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
我在使用现代 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