【发布时间】:2021-12-19 18:59:26
【问题描述】:
我尝试从 args 创建 std::list,但是当传递超过 0 个参数时,会出现错误“没有匹配的函数用于调用 'make_unique'”。我认为错误是我一次将所有参数传递给 make_unque,但我不明白如何打开捆绑包 2 次。
template<class ...Args>
void do(Args&&... args)
{
std::list<std::unique_ptr<Base>> obj(std::make_unique<Child>(std::forward<Args>(args)...));
}
【问题讨论】:
-
很确定你需要
obj{std::make_unique<Child>(std::forward<Args>(args))...} -
@NathanOliver:但问题在于 initializer_list 具有 const 元素,并且无法移动。
-
@Jarod42 哦,是的,那些讨厌的 const 元素。好吧,这使这变得更加复杂。
-
看起来这里有黑客攻击:stackoverflow.com/questions/46737054/…
标签: c++ c++14 variadic-templates