swig / c#:名称空间和模板
SWIG / C# : namespace and templates
我有一个C 库,希望使用swig生成一个不错的包装器,为此,我创建了以下SWIG接口文件,但是我遇到了一些问题:
1-无C#名称空间
2- C 预期类很复杂,我希望在C#中创建自己的包装器(部分类别(,我需要的只是SWIG生成骨架。我将自己提供其余的实施。有没有办法做到这一点 ?(我已经检查了文档。但这还不清楚(。另外,C#类必须是一个通用类,所以我会期望的是预期的,等等...
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;
- 对于命名空间,我发现在C#中生成它们的唯一方法是将-namespace添加到Swig包装器中。
喜欢:
swig -namespace myc#nesspace.myc#ohternamespace myfile.i
-
我想您能借此帖子找到它。
-
我从未找到针对接口的解决方案,因为它在C#和C 中完全不同,
相关文章:
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 命名空间中具有.h和.cpp文件的类
- 从父命名空间重载类型
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- 在命名空间中定义函数还是限定函数
- C++:对不存在的命名空间使用命名空间指令
- 通过继承类使用来自不同命名空间的运算符
- Python 3.7 和 excess_args 的 SWIG 问题
- 使用命名空间时出现多个定义错误
- OpenGL相机和相机空间转型的困惑
- CUDA内核和数学函数的显式命名空间
- 打印第二列时的2d字符矢量打印空间
- 嵌套的匿名命名空间
- 如何使用 swig C++命名空间作为 python 模块公开
- 分解SWIG Python接口 - 容器会产生命名空间冲突
- swig / c#:名称空间和模板
- 如何使用SWIG在命名空间内的模板类中包装c++操作符[]
- 用SWIG包装仅在头文件中定义的命名空间自定义类型
- Swig命名空间错误?不是一个有效的基类
- 如何通过SWIG公开名称空间的C++字符串常量?(C#)