当前位置:   article > 正文

C语言中调用C++_c调用c++

c调用c++

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

示例

  • test_class.h
  1. #ifndef TESTCLASS_H
  2. #define TESTCLASS_H
  3. #include<iostream>
  4. #include<stdio.h>
  5. class ValueClass
  6. {
  7. private:
  8. int value;
  9. int sum;
  10. public:
  11. ValueClass();
  12. void Add(int i, int j);
  13. };
  14. #endif
  • test_class.cpp
  1. #include "test_class.h"
  2. ValueClass::ValueClass(){
  3. printf("hello world \n");
  4. }
  5. void ValueClass::Add(int i, int j){
  6. sum = i+j;
  7. printf("sum : %d value : %d\n",sum,value);
  8. }
  • 编程生成动态库   
g++ test_class.cpp -shared -o libtestclass.so -I./ -fPIC

封装层

  • TestWrapper.h
  1. #ifndef _TEST_WRAPPER_H
  2. #define _TEST_WRAPPER_H
  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif
  6. void myValueClass(int a, int b);
  7. #ifdef __cplusplus
  8. }
  9. #endif
  10. #endif
  • TestWrapper.c
  1. #include "TestWrapper.h"
  2. #include "test_class.h"
  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif
  6. void myValueClass(int a, int b){
  7. ValueClass t;
  8. t.Add(a,b);
  9. }
  10. #ifdef __cplusplus
  11. };
  12. #endif
  • 编译成动态库  
g++ TestWrapper.c -shared -o libmyclass.so -L./ -ltestclass -fPIC -Xlinker -rpath=./

主函数

  • main.c
  1. #include "TestWrapper.h"
  2. int main()
  3. {
  4. myValueClass(1,2);
  5. }
  • 编译
gcc main.c -o main -lmyclass -L./ -I . -Xlinker -rpath=./

该方法比较方便,也有其他方法实现

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号