目录
1、需求背景
最近有个项目要求将OpenCV的一个函数移植成由C语言编写,虽然我很不想干这件事情,但是毕竟是工作,还是得干。
本篇文章分享一下将C++代码移植成C语言的基本思路,和过程中遇到的问题。
2、移植成C语言
2.0 移除namespace特性
这个很简单,直接删。
2.1 移除template特性
C++的模板编程可以将多种类型的输入编译成分别对应的函数。
在C语言中,模板编程往往只会被解释成其中的一种。当然,如果被解释成多种,那就创建同样数量的类或函数就可以了。不同的类或函数可以增加不同的后缀以区分,例如 Point2f
表示 float 类型、Point2i
表示 int 类型。
C++代码:
template<typename _Tp> class Point_
{
public:
_Tp x;
_Tp y;
Point_() : x(0), y(0) {
}
Point_(_Tp _x, _Tp _y) : x(_x), y(_y) {
}
Point_<_Tp> operator-(const Point_<_Tp>& other) {
return Point_<_Tp>(x - other.x, y - other.y);
}
float cross(const Point_& other) const {
return x * other.y - y * other.x;
}
};
typedef Point_<float> Point2f;
移除模板特性:
class Point2f
{
public:
Point2f() = default;
Point2f(float _x, float _y) : x(_x), y(_y) {
}
float x = 0.f