"新"操作符在外部"C"中工作

hus*_*sik 3 c# c++ dll extern

我在C#项目中使用了C++ DLL,DLL里面有一个类,它由外部函数创建和销毁,例如:

 class myClass
 {
   int N;
   public:
        //some elements and some functions

        myClass(int n)
        {
            N=n;
        }
 };

 __declspec(dllexport) myClass * builderF(int n)
 {

      return new myClass(n);

 }

 __declspec(dllexport) void destroyerF(myClass * c)
 {

      delete c;

 }
Run Code Online (Sandbox Code Playgroud)

这些都是外部的"C"{}体.

编译器如何让我使用C++功能是"C"空间?它不仅适用于C代码吗?这是经过测试和运行的(我开始为C#制作一个opencl包装器).我之前只使用纯C代码.

Jam*_*nze 9

extern "C"不会将编译器更改为C编译器.它只表示任何函数(或函数指针)将在其接口中使用C约定.所以你仍然可以在函数中用C++做任何事情; 它只会影响名称修改和调用约定.

  • 跟随詹姆斯的回答,你在"外部"C"`块中唯一不能做的就是过载功能; 重载是通过名称修改来管理的,正如James所说,在这个区块内不存在. (2认同)