将OpenCV的代码从C++移植到C语言过程小记

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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值