我有一个args...任意类型向量的参数包,对应于它有一个索引向量,v = {3,0,5...}其大小和顺序与 的成员数量相同args...。我想返回给出的索引处get_tuple的元素元组。args...v
这是到目前为止我所拥有的,但我一直在尝试迭代参数包的成员。
template<typename... Args>
auto get_tuple(const std::vector<size_t>& vector, const Args &... args) {
return std::make_tuple(args[v[0]]...);
}
Run Code Online (Sandbox Code Playgroud)
例如:
std::vector<std::string> v1 = {"a", "b"};
std::vector<int> v2 = {1,2};
std::vector<size_t> v = {0,1};
auto result = get_tuple(v, v1, v2); // ("a",2) expected
Run Code Online (Sandbox Code Playgroud) 我想传递一个QWidget指针参数(plot2)到Qt的addWidget(QWidget * T,...)功能,需要一个指向一个QWidget作为第一个参数.如果我传递原始指针plot2,我按预期得到两个并排面板.
原始指针版本
plot1 = new QWidget;
plot2 = new QWidget;
gridLayout = new QGridLayout(gridLayoutWidget);
...
gridLayout->addWidget(plot1, 1, 1, 1, 1);
gridLayout->addWidget(plot2.get(), 1, 2, 1, 1);
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用std::unique_ptr版本plot2并通过std :: unique_ptr(plot2)传递指针,如下面的代码片段所示,则相关的面板plot2会丢失,而编译器不会提出任何投诉.
智能指针版
plot1 = new QWidget;
auto plot2 = std::unique_ptr<QWidget>(new QWidget);
gridLayout = new QGridLayout(gridLayoutWidget);
...
gridLayout->addWidget(plot1, 1, 1, 1, 1);
gridLayout->addWidget(plot2.get(), 1, 2, 1, 1); // this panel goes missing
Run Code Online (Sandbox Code Playgroud)
我尝试使用过std::shared_ptr但结果仍然相同.
什么的作品当然是,如果我 …