将模板函数指针转换为bool失败

时间:2014-09-19 11:54:35

标签: c++ templates function-pointers

考虑代码:

void fnc(int, long, double*){}
template<int I> void f(int, long, double*){}

int main()
{
    bool a = fnc;  //(1) ok
    bool b = f<4>;  //(2) error
}

触发an error

error: cannot resolve overloaded function 'f' based on conversion to type 'bool'
 bool b = f<4>  //(2) error

为什么第一种情况是正确的,但第二种情况不正确?

1 个答案:

答案 0 :(得分:1)

你完全忽略了所有的警告,这些警告可以告诉你,你做了一些非常错误的事情。
此外,您应该使用&来获取函数地址。

其次,您隐式地将一个函数指针转换为bool变量 明确地说明它,告诉编译器你认为你知道你正在做什么,并且你对它有所了解:

   bool b= (void*)&ff<4>;  

我只需说铸造东西以避免错误和警告是一个坏主意 在大多数情况下,警告和错误可以帮助您避免数据丢失以及通常会导致运行时错误的事情。