这主要是为了清理我的构造函数中的一堆代码。仅在构造函数中我就有大约 20 多行,connect(object, func1, this, func2)
我正在尝试通过使用std::vector<std::tuple<QObject*,std::function<void()>,std::function<void>>>> connections;
如果我能做这样的事情,效果会很好:
std::vector<std::tuple<QObject*,std::function<void()>,std::function<void>>>> connections = {
std::make_tuple(mySlider, std::bind(&QSlider::sliderReleased,mySlider, std::bind(&Foo::onSliderChanged,this)),
.
.
.
};
然后这样称呼它:
for(auto &&e : connections)
connect(std::get<0>(e),std::get<1>(e),this,std::get<2>(e));
但是,当我这样做时,我收到一个错误,即存在替换失败并且 astd::function<void()>
无法转换为函数指针。所以决定改变它并创建实际的函数指针,如下所示:
typename void(Foo::*fooFunc)();
typename void(QSlider::*sliderFunc)();
std::vector<std::tuple<QObject*,sliderFunc,fooFunc>> sliderConnections = {
std::make_tuple(mySlider, &QSlider::sliderReleased, &Foo::onSliderChanged),
.
.
.
};
同样的事情,然后我尝试调用它:
for(auto &&e : sliderConnections)
connect(std::get<0>(e),std::get<1>(e),this,std::get<2>(e));
但是,这也会在没有转换的情况下提供类似的错误。这没有任何意义,因为现在我实际上正在使用函数指针。根据连接文档,它应该能够使用函数指针来连接它们。所以要么我错误地传递它。或者我想要达到的目标是不可能的。
任何帮助,将不胜感激!