问题描述
存在一些问题,涉及与从可变参量模板类创建std::tuple
关联的移动语义。这是我的课程(正在使用Qt,但这无关紧要):
template<typename ...Ts>
class QuestionBox : public qgroupbox
{
public:
QuestionBox(const QString& question,Ts... args)
{
this->setTitle(question);
layout = new qgridLayout(this);
questionBoxElements = std::make_tuple<Ts...>(args...); //ERROR: Cannot bind rvalue ref QLabel*&& to lvalue QLabel*
auto loop = [&](auto& arg)
{
layout->addWidget(arg);
};
(loop(args),...);
}
private:
qgridLayout* layout;
std::tuple<Ts...> questionBoxElements;
};
并这样称呼:
auto divisionSlider = new FancySlider(0,30);
auto divisionLabel1 = new QLabel("Ranking Duration (days) : ");
auto divisionLabel2 = new QLabel("Submission Duration (days) : ");
auto competitionDivison = new QuestionBox<FancySlider*,QLabel*,QLabel*>("How will the competition be divide up?",divisionSlider,divisionLabel1,divisionLabel2);
因此,这里的所有内容都工作正常,但标记为抛出错误的行除外。我要做的就是创建一个包含所提供类型和所提供参数的元组。
我尝试将导致错误的行替换为:
questionBoxElements = std::make_tuple<Ts...>(std::move(args...));
,这将导致先前的错误消失,但是,我得到了一个新的错误(对于 some 并非所有类型):
No matching function for call to 'move(Type1*&,Type2*&)'
我假设这是因为引发此错误的类型没有实现move构造函数?正确吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)