【发布时间】:2016-02-03 17:23:39
【问题描述】:
参考以下代码
#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() 不能解析为函数指针?
【问题讨论】:
-
我没有答案,但我建议使用
std::function而不是函数指针。它更具可读性,你不用处理它是否是指针。 -
@AdiLevin
std::function只应在必要时使用,即当人们真正想要存储(!)没有任何共同之处但可调用的可调用对象时(使用各自的参数,返回各自的类型)。它增加了很多开销。
标签: c++ function templates c++11 function-pointers