小编mar*_*ipf的帖子

Boost.Python:如何公开std :: unique_ptr

我对boost.python相当新,并尝试将函数的返回值公开给python.

函数签名如下所示:

 std::unique_ptr<Message> someFunc(const std::string &str) const;
Run Code Online (Sandbox Code Playgroud)

在python中调用函数时,我收到以下错误:

TypeError: No to_python (by-value) converter found for C++ type: std::unique_ptr<Message, std::default_delete<Message> >
Run Code Online (Sandbox Code Playgroud)

我在python中的函数调用如下所示:

a = mymodule.MyClass()
a.someFunc("some string here") # error here
Run Code Online (Sandbox Code Playgroud)

我试图暴露std :: unique_ptr但只是无法让它工作..有人知道如何正确暴露指针类?谢谢!

编辑: 我尝试了以下内容:

class_<std::unique_ptr<Message, std::default_delete<Message>>, bost::noncopyable ("Message", init<>())

;
Run Code Online (Sandbox Code Playgroud)

这个例子编译,但我仍然得到上面提到的错误.此外,我试图暴露类Message本身

class_<Message>("Message", init<unsigned>())

        .def(init<unsigned, unsigned>()) 
        .def("f", &Message::f)
;
Run Code Online (Sandbox Code Playgroud)

c++ python unique-ptr boost-python c++11

23
推荐指数
1
解决办法
3128
查看次数

Qt Designer:更改窗口的基类

我已经在Qt Designer中为我的应用程序创建了第二个窗口.我读到QMainWindow将是第二个窗口的错误类(基本上应该只是某种对话框),所以我想改变基类.

我的问题是:

  1. 有没有办法在不创建新窗口的情况下更改基类并将我的代码复制到新文件中?
  2. 有人可以解释何时使用QMainWindow,QDialog和QWidget?我没有找到Qt中这三个基类之间差异的良好解释.

c++ user-interface qt

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

Selenium没有启动便携式镀铬但是本地安装

我有Selenium网络驱动程序的问题.我要做的是启动"便携式"chrome而不是本地安装,因为它有不同的设置.

问题是便携式Chrome(来自PortableApps)似乎只在使用GoogleChromePortable.exe时启动.如果我直接使用Chrome二进制文件,它将启动我的本地安装.使用Selenium似乎无论我传递给它的Chrome路径(GoogleChromePortable.exe或二进制路径),它都会启动我的本地安装.

这是我的代码:

String chromePath = "M:/my/path";
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
ChromeOptions options = new ChromeOptions();
capabilities.setCapability("chrome.binary", chromePath);
capabilities.setCapability(ChromeOptions.CAPABILITY, options);
Run Code Online (Sandbox Code Playgroud)

任何想法如何能够启动我的便携式铬?谢谢

selenium google-chrome

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

过滤 MySQL 结果的最佳实践

我想在我的 PHP 项目中实现一个过滤器功能。为了实现过滤器,我通常只在我的查询中添加一个 WHERE 子句来显示过滤的结果。

我的问题是:这些过滤器不仅需要添加一个简单的 WHERE 子句,还需要一个包含多个 JOIN的巨大查询。结果查询有 > 30 行。

稍后,还应该有一个搜索功能,然后也需要这个巨大的查询。我想知道这是否是一个好的做法,或者我是否应该在我的数据库表中添加一个“冗余”数据库列,在那里我计算每次更新时过滤所需的属性。有了这个专栏,我就不会对我的项目的不同地方进行大量查询,而是有一个多余的专栏。

你怎么认为?

你好

正如所质疑的,这里是表结构/代码。这不是确切的代码,因为还有一个修订系统使它变得更加复杂,但对于理解这已经足够了:

表格提交:

ID (primary)
(additionalColumns)
Run Code Online (Sandbox Code Playgroud)

表格报告:

ID (primary)
submissionID (reference to submission table)
(additionalColumns)
Run Code Online (Sandbox Code Playgroud)

表report_objects:

reportID (reference to reports table, multiple report_object for one report)
Run Code Online (Sandbox Code Playgroud)

表记账:

ID (primary)
reportID (reference to reports table, multiple accountings for one report)
(additionalColumns)
Run Code Online (Sandbox Code Playgroud)

表accounting_objects:

ID
accountingID (reference to accounting table, multiple accounting_object for one accounting)
(additionalColumns)
Run Code Online (Sandbox Code Playgroud)

对于提交,正在创建一个或多个报告,其中包含多个对象 (report_objects)。对于每个报表,我可以创建多个记帐,其中每个记帐针对报表的几个对象。会计报表对象存储在accounting_object

我的查询/过滤器会检查一个 submitID 的每个 report_object 是否都针对一个 submitID 进行了计算(accounting_object 存在)。

php mysql join filter

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

boost.python:参数类型与C++签名不匹配

在python中调用C++函数时遇到一个奇怪的问题.

我公开了一个我想要调用函数的类:

class_<MyClass, std::shared_ptr<MyClass>>("MyClass", init<>())
    // ...
    .def("someFunc", &MyClass::someFunc)
;
Run Code Online (Sandbox Code Playgroud)

std::shared_ptr<MyClass>从另一个通过公开的类中获取一个成员变量.def_readonly(...)

当我尝试调用该函数时,我收到以下错误:

File "pytest.py", line 27, in test_func
    cu.someFunc("string")
Boost.Python.ArgumentError: Python argument types in
    MyClass.someFunc(MyClass, str)
did not match C++ signature:
    result(MyClass{lvalue}, std::string)
Run Code Online (Sandbox Code Playgroud)

据我所知,签名确实匹配.有人看到了这个问题吗?

c++ python boost boost-python c++11

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

没有实现的构造函数定义?

我正在使用一个非我自己编写的库.有些类在其头文件中声明了类似的构造函数

class SomeClass {
public:
    SomeClass(const SomeClass& orig);

    // more declarations

}
Run Code Online (Sandbox Code Playgroud)

但是.cpp文件中没有实现.为什么代码编译呢?

c++ c++11

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

Boost.Python和Boost.Signals2:分段错误

我在使用boost.python暴露的现有C++库中集成boost.signals2时遇到问题.

我有一个暴露于python的类std::shared_ptr.这个类应该能够在某些事件上提出一些信号.因此我暴露了connect_slot一个boost::python::object以参数为参数的函数.如果我在连接一个插槽后直接发出一个信号,一切正常,但是如果该类后来提升信号,我会收到分段错误.

我认为这可能与c ++ lib中的线程有关(它也使用了boost :: asio等)

以下是一些代码段:

MyClass.h:

public:
    typedef boost::signals2::signal<void (std::shared_ptr<int>)> signal_my_sig;
    void connect_slot(boost::python::object const & slot);

private:
    signal_my_sig    m_sig;
Run Code Online (Sandbox Code Playgroud)

MyClass.cpp:

void MyClass::connect_slot(boost::python::object const & slot) { 
    std::cout << "register shd" << std::endl;
    m_sig.connect(slot);

    m_sig(12345); // this works
}


void MyClass::some_later_event() {
    m_sig(654321); // this does not work

}
Run Code Online (Sandbox Code Playgroud)

我在python中用自定义python函数调用MyClass :: connect_slot函数,如下所示:

def testfunc(some_int):
    print("slot called")

m = myext.MyClass()
m.connect_slot(testfunc)
Run Code Online (Sandbox Code Playgroud)

引发的分段错误的回溯(使用gdb)MyClass::some_later_event如下所示:

[Thread debugging using libthread_db enabled]
Using host libthread_db library …
Run Code Online (Sandbox Code Playgroud)

c++ python boost boost-python c++11

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