sap*_*sap 10 c++ templates function c++11
对不起,如果之前已经询问过,但我找不到它.
因此,我试图教自己关于模板和新的C++ 11功能(主要是lambdas,我一直喜欢的其他语言).
但是在我的测试中,我找到了一些我不知道它有效的东西,我试图理解它是如何工作的,但是无法弄清楚它.
以下代码:
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 );我期望工作,因为编译器将看到模板接收函数地址并假设参数应该是指针.
但是第二个电话是什么?假设是什么模板?一个函数的副本(如果它甚至有意义)?
Jam*_*lis 15
函数可以隐式转换为指向自身的指针; 这种转换几乎无处不在.  Test(Callback)与...完全相同Test(&Callback).没有区别.在这两种情况下,都Func被推断为void(*)(int).
函数指针很奇怪.您可以在"为什么所有这些疯狂的函数指针定义都能正常工作?"中找到更多关于它们的信息.