我有一个C ++库,并希望使用SWIG生成一个很好的包装器,为此,我创建了以下SWIG接口文件,但是我遇到了一些问题:
1 - 没有生成C#名称空间
2 - C ++ Expected类很复杂,我希望在C#中创建自己的包装器(按示例分类),我需要的是SWIG生成骨架。我将自己提供其余的实现。有没有办法做到这一点 ? (我已经查过了医生。但目前还不清楚)。此外,C#类必须是泛型类,因此我将使用Expected等来代替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;
答案 0 :(得分:0)
像:
swig -namespace MyC#Namespace.MyC#OhterNamespace myfile.i
我认为你可以通过另一篇帖子找到它。
我从未找到过接口的解决方案,因为它在C#和C ++中完全不同,