从可变参数模板参数创建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 (将#修改为@)