c++ - 使用 C 链接在函数内部创建 C++ 模板
问题描述
myLib
考虑一个写入的共享库C++11
和一个调用. 但是,它是由不同的编译器编译的,因此两者使用 C 链接链接在一起,而头文件 for负责处理。一旦进入,我想使用模板来享受尽早在代码中的特权。有没有一种方法可以避免在全局命名空间中为所有支持的类型使用单独的函数?我可以控制两者的源代码。myExe
C++17
myLib
myExe
myLib
myLib
C++
例如,在里面myLib
,我想避免:
// Exported function for int
void myCLinkedFuncForInt(int A)
{
// templated C++ internal function for myLib
myLib::myFunc(A);
}
// Exported function for float
void myCLinkedFuncForFloat(float A)
{
// templated C++ internal function for myLib
myLib::myFunc(A);
}
我定义myLib::myFunc
为模板的地方。
我尝试过一些有趣但不安全的事情:
void myCLinkedFuncForEverything(void* A, const char* type)
{
const std::string CppType(type);
if (CppType == "int")
return myLib::myFunc(*(reinterpret_cast<int*>(A));
if (CppType == "float")
return myLib::myFunc(*(reinterpret_cast<float*>(A));
// If we reached here, we are unsupported
std::cout << "Data type not supported" << std::endl;
}
然后在myExe
,我把所有东西都投给了avoid*
和supply type
。我还有什么其他选择C++11
?
注意: std::variant
并std::any
进来了C++17
。
解决方案
有没有一种方法可以避免在全局命名空间中为所有支持的类型使用单独的函数?
不,因为您要做的是为每种此类类型实例化模板,并使其可从 C 中使用,因此您必须为每种类型定义它。
推荐阅读
- jquery - 在 materialUI appbar 正下方渲染菜单
- python - Python Asyncio网络客户端StreamWriter正常不发送数据,就在EventLoop关闭
- python-3.x - 制作一个二次因子,While 循环搞砸了
- recursion - SML 迭代与递归
- go - 我可以在使用 prestop 钩子进行硬驱逐之前优雅地终止进程吗?
- javascript - Blade 中的 VueJS 模板未更新
- r - 向分组柱形图添加数据标签
- python - 从 API 导入数据并使用 Python 将其导出到 MySQL 数据库
- android - Android 11,在skia/src/ops/GrorvalOpFactory.cpp 崩溃,帮我看看为什么
- ios - SwiftUI 如何使用 TabView 隐藏导航栏