【发布时间】:2011-10-29 23:43:08
【问题描述】:
抱歉,之前有人问过这个问题,但我找不到。
所以我试图让自己了解模板和新的 C++11 功能(主要是 lambda,我一直喜欢其他语言的东西)。
但在我的测试中,我发现了一些我不知道它有效的东西,我试图了解它是如何工作的,但无法弄清楚..
以下代码:
template <class Func>
void Test( Func callback ) {
callback( 3 );
}
void Callback( int i ) {
std::cout << i << std::endl;
}
int main( int argc, char** argv ) {
Test( &Callback ); // this I was expecting to work, compiler will see its a pointer to a function
Test( Callback ); // this also works, but how?!
return 0;
}
如果我了解模板的工作原理,基本上它们是编译器知道要构建什么的方案,所以我希望第一次调用Test( &Callback ); 可以工作,因为编译器会看到模板接收到一个函数地址并将假设参数应该是一个指针。
但是第二个电话是什么?假设它是什么模板?一个函数的副本(如果这有任何意义的话)?
【问题讨论】:
标签: c++ function templates c++11