C中的函数和函数指针
发布时间:2020-12-16 10:01:26 所属栏目:百科 来源:网络整理
导读:参考以下代码 #include iostreamusing std::cout;using std::endl;#include vectorusing std::vector;void function() { cout "Hello World" endl;}int main() { vectorvoid (*) () functions; functions.push_back(function); // (1) no error functions.pu
参考以下代码
#include <iostream> using std::cout; using std::endl; #include <vector> using std::vector; void function() { cout << "Hello World" << endl; } int main() { vector<void (*) ()> functions; functions.push_back(function); // (1) no error functions.push_back(&function); // (2) no error for (const auto& func : functions) { func(); } // vector<decltype(function)> vec; // (3) error return 0; } 当我取消注释时,似乎有一个错误(3),我只是想了解这背后的原因.当我将函数作为参数传递给模板化函数时,它是否将类型解析为函数指针?编译器将所有函数类型推断为函数指针是有意义的,但为什么decltype()不能解析为函数指针? 解决方法
decltype(function)是void() – 一个函数.
你需要的是一个函数的衰变版本 – void(*)(): std::decay<decltype(function)>::type std::vector < std::decay<decltype(function)>::type > myPtrFunctionVec; PS. 编辑:正如@Daniel Jour评论的那样,解决方案decltype(& function)也可以工作,因为构造& f给出指向f的指针,这就是你需要的 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |