gpt4 book ai didi

c++ - 具有私有(private)/删除的默认构造函数的参数类型

转载 作者:行者123 更新时间:2023-11-30 04:02:49 33 4
gpt4 key购买 nike

假设我想将 std::type_index 类型映射为 SWIG 中的参数(忽略目标语言中所述类型的完全无意义)。

void dosomething(std::type_index arg);

包装此函数在生成的代码中提供以下 decldef,在从 inarginit 等类型映射方法生成的代码之前:

std::type_index arg1;

std::type_index 没有默认构造函数。我无权访问它的定义。 C++ 编译器毫不客气地拒绝了代码。

如何让 SWIG 生成可用代码?

我查看了不同的类型映射方法,但一无所获;特别是,typemap(arginit) 看起来很有希望,但是当它没有替换 arg1 的 decldef 时就失败了。

更新:将函数签名更改为...

void dosomething(const std::type_index& arg);

... 强制 SWIG 生成 std::type_index* 作为 arg1 的类型。不过,我同样感到困惑,因为我无法让它与按值传递一起使用。我原来的问题是(在四重否定池中)。

编辑:

根据请求,使用由 SWIG 将 Python 字符串按值类型映射到 std::type_index 的 Python 调用函数的方式如下:

dosomething("ClassName")

最佳答案

使用 %nodefaultctor 特性:

%nodefaultctor std::type_index;  // Disable default constructor generation for that class

因为 std::type_index 没有定义默认构造函数,所以这应该可以工作。看起来您必须在 .i 文件中定义类之前放置语句,所以在 %include 语句之前放置 type_index

SWIG 文档第 6.6.2 节中的详细信息(例如 http://www.swig.org/Doc3.0/SWIGPlus.html#SWIGPlus_nn8 如果您使用的是 SWIG 3——但此功能自 1.3 以来没有太大变化)。

更新:如果您的目标是将函数调用为 dosomething("ClassName"),那么我会考虑使用 %inline 创建一个 dosomething (std::string) 然后调用 type_index 版本。在您的 .i 文件中,它看起来像这样:

%include "std_string.i"
%{
%include "dosomething.h"
%}

%inline %{
void dosomething(std::string arg)
{
... determine which type index to use ...
dosomething(type_index(whatever))
}
%}

关于c++ - 具有私有(private)/删除的默认构造函数的参数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24856286/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com