如何解决从可变参数模板参数创建std :: tuple
存在一些问题,涉及与从可变参量模板类创建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 举报,一经查实,本站将立刻删除。