0
我有一個C++庫,並希望使用痛飲周圍產生一個漂亮的包裝,對於這一點,我創建了以下SWIG接口文件,但我得到了一些問題:SWIG/C#:命名空間和模板
1 - 沒有生成C#命名空間
2 - C++ Expected類很複雜,我希望在C#中創建自己的包裝器(部分類),我需要的是SWIG生成骨架。我將自己提供其餘的實施。有沒有辦法做到這一點 ? (我檢查了文檔,但不清楚)。此外,C#類必須是一個通用類,所以而不是Expected_Void我會有預期的等...
3 - 有沒有辦法強制SWIG生成接口,而不是類? (對於C++類IViewHandle)
這裏是我的.i文件
%module sdk
%{
#include "../include/sdk/core/Expected.hpp"
#include "../include/luciadsdk/view/IViewHandle.hpp"
#include "../include/sdk/view/IViewContext.hpp"
#include "../include/sdk/view/ViewContext.hpp"
%}
%include <windows.i>
%nodefaultctor;
//--------------------------------------------------
// Expected<T>
//--------------------------------------------------
%nspace sdk::core;
namespace sdk {
namespace core {
template<typename T>
class Expected
{
public:
};
%template(Expected_Int) Expected<int>;
%template(Expected_Float) Expected<float>;
%template(Expected_Bool) Expected<bool>;
%template(Expected_Void) Expected<void>;
} }
//--------------------------------------------------
// IViewHandle
//--------------------------------------------------
%nspace sdk::view;
namespace sdk {
namespace view {
class IViewHandle
{
public:
};
} }
//--------------------------------------------------
// IViewContext
//--------------------------------------------------
%nspace sdk::view;
namespace sdk {
namespace view {
class IViewContext
{
public:
virtual sdk::Expected<void> setHandle(const IViewHandle& handle) = 0;
virtual void invalidate() = 0;
protected:
IViewContext() = default;
~IViewContext() = default;
};
} }
//--------------------------------------------------
// ViewContext
//--------------------------------------------------
%nspace sdk::view;
namespace sdk {
namespace view {
class ViewContext : public IViewContext
{
public:
ViewContext();
~ViewContext();
sdk::Expected<void> setHandle(const IViewHandle& handle) override;
void invalidate() override;
};
} }
%clearnodefaultctor;
是的,我知道的命名空間,問題是,每類都必須有自己的名字空間!但是,謝謝 – CDZ
所以你應該爲每個類創建一個接口...無聊但唯一的方法,我發現。 –