我试图存储在一个std::tuple不同数量的值,这将被用作参数调用一个函数指针匹配存储的types的参数。 我创build了一个简化的例子来展示我正在努力解决的问题: #include <iostream> #include <tuple> void f(int a, double b, void* c) { std::cout << a << ":" << b << ":" << c << std::endl; } template <typename …Args> struct save_it_for_later { std::tuple<Args…> params; void (*func)(Args…); void delayed_dispatch() { // How can I "unpack" params to call func? func(std::get<0>(params), std::get<1>(params), std::get<2>(params)); // But […]
为什么标准C ++ 11库中没有std::make_unique函数模板? 我发现 std::unique_ptr<SomeUserDefinedType> p(new SomeUserDefinedType(1, 2, 3)); 有点冗长。 以下不会更好吗? auto p = std::make_unique<SomeUserDefinedType>(1, 2, 3); 这隐藏了new很好,只提到一次类型。 无论如何,这是我尝试执行make_unique : template<typename T, typename… Args> std::unique_ptr<T> make_unique(Args&&… args) { return std::unique_ptr<T>(new T(std::forward<Args>(args)…)); } 我花了相当长的时间才得到std::forward东西来编译,但我不确定是否正确。 是吗? std::forward<Args>(args)…是什么意思? 编译器做了什么?