【发布时间】:2018-03-19 10:05:12
【问题描述】:
是否可以存储与以下函数具有相似行为的函数:
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 = ?
如何为具有与 forwarding_func 相同行为的类型 T 构建可调用对象。我必须存储它以供以后使用,所以我确实需要一个 std::function 对象吗?甚至可以在函数对象中存储像这样的 lambda 表达式吗?
auto f = [](auto&& x){
myfunction(std::forward<decltype(x)>(x));
}
【问题讨论】:
-
是的,可以使用 lambda。如果你想存储它们,你可以使用
std::function或一个类,模板化在传递的 lambda 对象的类型上。 -
可以在 std::function 对象中存储这样的东西,但不能。
-
请注意,您的示例 lambda 将(如果有效)不采用通用引用,而是采用右值引用,即。它只接受右值作为参数。我知道您明确要求如何正确执行此操作,但在我看来仍然存在一些混乱。您可能想阅读 Scott Meyer 的文章 (isocpp.org/blog/2012/11/…),了解通用引用和右值引用之间的区别。
-
"auto&& // 这里,"&&" 不代表右值引用" 他不是在这里说明 auto 也可以推导出为引用类型吗?
-
啊,我现在明白了,
auto来自哪里...是的,你是对的,auto&&将是一个通用参考,但是(你可能知道)你不能将auto与函数参数一起使用。普通函数必须准确指定它们采用的参数类型(以及引用类型),因此没有模板就无法做到这一点。
标签: c++ lambda functional-programming