前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言中调用C++

C语言中调用C++

作者头像
程序手艺人
发布2018-05-18 15:35:27
8.9K0
发布2018-05-18 15:35:27
举报
文章被收录于专栏:程序手艺人程序手艺人

因项目中需要更新VAD算法,VAD使用C++实现的. 代码框架中需要使用C调用C++来实现对VAD的调用.

C++调用C很方便, 如果C调用C++,主要思想是将C++的动态库封装一层,这一层采用C语言实现,主要封装C++中的类

示例

  • test_class.h
代码语言:javascript
复制
#ifndef TESTCLASS_H
#define TESTCLASS_H
#include<iostream>
#include<stdio.h>

class ValueClass
{

private:
    int value;
    int sum;
public:
    ValueClass();
    void Add(int i, int j);
};

#endif 
  • test_class.cpp
代码语言:javascript
复制
#include "test_class.h"
ValueClass::ValueClass(){
    printf("hello world \n");
}
void ValueClass::Add(int i, int j){
    sum = i+j;
    printf("sum : %d value : %d\n",sum,value);
}
  • 编程生成动态库   g++ test_class.cpp -shared -o libtestclass.so -I./ -fPIC

封装层

  • TestWrapper.h
代码语言:javascript
复制
#ifndef _TEST_WRAPPER_H
#define _TEST_WRAPPER_H

#ifdef __cplusplus
extern "C" {
#endif 

void myValueClass(int a, int b);

#ifdef __cplusplus
}
#endif 
#endif 
  • TestWrapper.c
代码语言:javascript
复制
#include "TestWrapper.h"
#include "test_class.h"

#ifdef __cplusplus
extern "C" {
#endif 

void myValueClass(int a, int b){
    ValueClass t;
    t.Add(a,b);
}

#ifdef __cplusplus
};
#endif 
  • 编译成动态库  g++ TestWrapper.c -shared -o libmyclass.so -L./ -ltestclass -fPIC -Xlinker -rpath=./

主函数

  • main.c
代码语言:javascript
复制
#include "TestWrapper.h"
int main()
{
    myValueClass(1,2);
}
  • 编译 gcc main.c -o main -lmyclass -L./ -I . -Xlinker -rpath=./

该方法比较方便,也有其他方法实现,可以 如何用C语言封装 C++的类,在C里面使用

参考

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年04月13日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 示例
  • 封装层
  • 主函数
  • 参考
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档