是否有可能存储有类似行为以下功能的函数:C++店函数转发普遍引用
void target(int foo, size_t bar) {}
void target(std::string foo, int bar) {}
template<T...>
void forwarding_func(T&&... args)
{
target(std::forward<T>(args)...);
}
auto forwarding_callable = ?
如何将一个建立类型T上的可调用对象具有相同的行为forwarding_func。我必须存储它以备后用,所以我确实需要一个std :: function对象?是否有可能在函数对象中存储像这样的lambdas?
auto f = [](auto&& x){
myfunction(std::forward<decltype(x)>(x));
}
是的,可以使用lambda表达式。如果你想存储它们,你可以使用'std :: function'或者一个以传递的lambda对象的类型为模板的类。 –
在std :: function对象中可以存储这样的东西,但不存储*。 –
请注意,您的示例lambda会(如果它工作)不采取通用的引用,而是一个右值引用,即。它只会接受rvalues作为论证。我知道你明确地要求如何做到这一点,但在我看来,这仍然存在一些混淆。您可能想阅读Scott Meyer的文章(https://isocpp.org/blog/2012/11/universal-references-in-c11-scott-meyers)关于通用和右值引用之间的区别。 – Knoep