C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了C中的函数和函数指针大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
以下代码

#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;
}

当我取消注释时,似乎有一个@L_262_2@(3),我只是想了解这背后的原因.当我将函数作为参数传递给模板化函数时,它是否将类型解析为函数指针?编译器将所有函数类型推断为函数指针是有意义的,但为什么decltype()不能解析为函数指针?

解决方法

decltype(function)是void() – 一个函数.
你需要的是一个函数的衰变版本 – void(*)():

std::decay<decltype(function)>::type

std::vector < std::decay<decltype(function)>::type > myPtrFunctionVec;

Ps.
如果您正在使用VC(visual stdio),您可以通过打印typEID(decltype(XXX)).name()轻松查看从decltype推导出的类型.与其他编译器不同,VC提供了类型的未修饰名称.非常方便的元编程调试.

编辑:正如@Daniel Jour评论的那样,解决方案decltype(& function)也可以工作,因为构造& f给出指向f的指针,这就是你需要的

大佬总结

以上是大佬教程为你收集整理的C中的函数和函数指针全部内容,希望文章能够帮你解决C中的函数和函数指针所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。