繁体   English   中英

C ++中的函数和函数指针

[英]Functions and function pointers in 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;
}

当我取消注释时,似乎有一个错误(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的指针,这就是你需要的

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM