包装INLINE函数

Wrapping INLINE functions

本文关键字:函数 INLINE 包装      更新时间:2023-10-16

可能重复:
C++/CLI混合模式DLL创建

我正在使用C++cli包装一个C++类。头文件如下所示:

pabcon.h

class PABCon {
private:
        unsigned int maxIndex;      
        long byteSize;  
public:
    __declspec(dllexport) inline unsigned int GetMaxIndex() { return this->maxIndex; };
    __declspec(dllexport) void invertData();
};

我用这种方式包装非内联函数:

pabconwrapper.h

public ref class PABConWrapper
{
private:
    PABCon *pabc;
public:
    PABConWrapper();
    ~PABConWrapper();
    void invertData();
};

pabconwrapper.cpp

PABConWrapper::PABConWrapper() : pabc(new PABCon())
{
}
void PABConWrapper::invertData()
{
    pabc->invertData();
}
PABConWrapper::~PABConWrapper()
{
    delete pabc;
}

我的问题是:

1( 包装inlinec++函数的最佳方式是什么?

2( 我应该如何处理pabcon.h中定义的私有变量?我也应该把它们包起来吗?

感谢

附言:我上一次接触C++是在4年前,从那时起我就用C#编码了。

inline:在内联中标记方法是一条指令,要求编译器不要发出函数调用,而是获取方法的内容,并将其直接放入调用函数中。我相信这只是一个建议,编译器无论如何都可以选择发出函数调用。无论如何,当从C++/CLI调用此函数时,您不需要做任何花哨的事情,所以在包装它时也不需要做什么花哨的事情。只需像包装其他方法一样包装它即可。

private变量:如果它们是private变量,则使用PABCon的非托管C++代码将无法访问它们。PABCon的公共接口只是公共方法,所以您只需要担心这些。(如果C++类有任何公共变量,那么您可以通过在C++/CLI中创建一个属性来包装它们。(

~PABConWrapper:在C++/CLI中,~不是析构函数,而是dispose方法。正如现在实现的那样,如果您忘记处理新类,就会出现内存泄漏。至少,将~切换为!,并声明终结器。理想情况下,同时实现!~,删除两个方法中的非托管对象(使用适当的null检查(,并在其他方法中添加适当的null检测。这将是一个很好的&IDisposable的正确实施。