小编pea*_*man的帖子

SWIG如何在Python中包装map <string,string>?

我正在使用SWIG 2.0为C++库创建一个Python包装器.一种方法的参数类型为"const std :: map&".SWIG很高兴为它生成一个包装器,但我无法弄清楚如何调用该方法.例如,如果我为该参数传递{"a":"b"},则会出现"NotImplementedError:重载函数的错误数字或参数类型"错误.

我查看生成的.cxx文件,希望它能澄清,但事实并非如此.这是处理该参数的代码:

res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_std__mapT_std__string_std__string_t,  0  | 0);
if (!SWIG_IsOK(res4)) {
  SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "new_Context" "', argument " "4"" of type '" "std::map< std::string,std::string > const &""'"); 
}
Run Code Online (Sandbox Code Playgroud)

它清楚地知道论证存在,并且它应该被转换为地图.但我无法弄清楚它实际上是希望我传递给它的.

c++ python swig stl

9
推荐指数
1
解决办法
6674
查看次数

Python runtime_library_dirs在Mac上不起作用

我有一个Python扩展模块,需要在运行时链接一些动态库,所以我需要告诉它在哪里寻找它们.我是通过在setup.py中指定runtime_library_dirs来做到这一点的.这在Linux上运行良好,但似乎对Mac没有影响.当我尝试导入我的模块时,我得到一个ImportError,我发现它消失的唯一方法是在启动python之前将库目录添加到DYLD_LIBRARY_PATH.我需要做些什么来完成这项工作?

python macos distutils shared-libraries

6
推荐指数
1
解决办法
1135
查看次数

使用Javascript提交表单不起作用

我有一个简单的上传文件的表格.如果我使用普通的提交按钮,一切都按预期工作:

<form id="mainform" method="post" action="/" enctype="multipart/form-data">
...
<input type="submit" id="submit" value="Analyze File"/>
</form>
Run Code Online (Sandbox Code Playgroud)

但是,如果我将其更改为普通按钮并使用Javascript提交表单,则没有任何反应:

<input type="button" id="submit" value="Analyze File" onclick="document.getElementById('mainform').submit()"/>
Run Code Online (Sandbox Code Playgroud)

我验证了onclick处理程序真的被调用了,查找表单工作正常.例如,如果我将其更改为onclick="alert(document.getElementById('mainform').action)",警报会按预期显示,并显示表单的目标URL.但由于某种原因,对submit()的调用根本就不提交表单.

html javascript forms

5
推荐指数
2
解决办法
1万
查看次数

使用 Visual Studio 2015 构建 FFTW 库 [添加:VS 2019 的步骤]

我正在尝试使用 Visual Studio 2015 来编译使用 FFTW 的项目。不幸的是,由于这个问题,来自 FFTW 网站的预编译二进制文件与 VS 2015 不兼容:未解析的外部符号 __imp__fprintf 和 __imp____iob_func, SDL2。尝试编译时出现链接错误。

我正在寻找有关如何编译兼容版本的任何建议。显而易见的答案是使用 VS 2015 重新编译 FFTW,但我根本找不到有关如何使用 Visual Studio 编译它的任何说明,并且有很多建议表明很难做到这一点。标准版本是用 MinGW 编译的,他们确实提供了如何做到这一点的说明。但是 MinGW 可以生成与 VS 2015 兼容的库吗?我也没有找到任何相关信息。

mingw static-libraries fftw visual-studio-2015 visual-studio-2019

2
推荐指数
1
解决办法
2162
查看次数

C ++方法参数可以是原始或对象

假设我有一个C ++类Foo。它具有一个模板化方法setValue(),需要接受以下任何参数作为其参数:

  • 任何原始类型
  • 类型的对象 Bar
  • 的子类的对象 Bar

我想写这样的东西。

template <class T>
void setValue(T& value) {
    if (std::is_fundamental<T>::value)
        setPrimitiveValue(value)
    else {
        Bar* bar = dynamic_cast<Bar*>(&value);
        if (bar != NULL)
            setBarValue(*bar);
    }
}
Run Code Online (Sandbox Code Playgroud)

但这无法编译。当我使用调用该方法时int,编译器会抱怨dynamic_cast不能在上使用int*。即使该代码分支没有针对原语执行,编译器仍然需要对其进行编译。

我该如何进行这项工作?请注意,这是类中的方法,因此不允许模板专门化。

c++ templates

2
推荐指数
1
解决办法
41
查看次数