【发布时间】:2016-12-13 12:42:53
【问题描述】:
我正在尝试编写一个 c++ lambda 函数,并且不喜欢使用 auto 作为类型。目前它看起来像:
#include <iostream>
int main() {
// Sends the address of an integer to a function which prints out the contents;
auto print_int = [](int* a) {std::cout << *a << std::endl;};
int a;
a = 3;
print_int(&a);
return 0;
}
但是,我想将 auto 更改为 std::function<void(int)> 之类的东西,但不知道怎么做。
似乎相关,但我不知道如何适应它。谢谢。
【问题讨论】:
-
你试过
std::function<void(int)> = [](int * a) {std::cout << *a << std::endl;};吗? -
标准没有指定lambda函数的具体类型名称。当真正需要 lambda 时,您也不应该关心它。
-
auto到底是什么问题? -
附带说明,如果您真的关心类型名称(我不明白您为什么会这样做),并且您的 lambda 是无捕获的,您可以将其分配给常规函数指针。
-
IMO,您应该只使用
auto并让编译器完成它的工作。即使有了多态性、模板、auto 关键字等,C++ 仍然是一种强类型语言,编译器仍然会确保无论 print_int 是什么,它都是类似于函数的东西,它愿意接受类似于指向 int 的指针的东西。不会有运行时意外。 --- 您将使用此代码获得的一个运行时惊喜是当您尝试使用未初始化的*a = 3和a时遇到访问冲突/段错误。