在C中使用C++结构

Raz*_*zer 4 c c++ struct

我有一个C++包含方法的结构:

struct S
{
   int a;
   int b;

   void foo(void)
   {
       ... 
   };
}
Run Code Online (Sandbox Code Playgroud)

我有一个用户程序,写在C.是否有可能得到一个指向S-struct和访问成员ab

mau*_*uve 7

您可以struct从C程序访问C++编写的成员,前提是您确保删除了对struct语法的C++添加:

// header
struct S {
  int a, b;

#ifdef __cplusplus
  void foo(); 
#endif
};

// c-file:
#include "header.h"

void something(struct S* s)
{
  printf("%d, %d", s->a, s->b);
}
Run Code Online (Sandbox Code Playgroud)

C++中结构和类的内存布局与C语言的C部分兼容.只要在结构中添加vtable(通过添加虚函数),它就不再兼容,您必须使用其他一些技术.

  • 我想值得一提的是,只要在图片中添加虚拟表,该技巧就会停止工作.或者开始使用继承...... (5认同)
  • vtables或只是私人部分.IMO,这是一种解决方案,它将通过工作开始,然后在最不方便的时刻停止. (2认同)