考虑代码:
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
为什么第一种情况是正确的,而第二种情况不正确?
最佳答案
你完全忽略了所有警告,这些警告告诉你你做错了什么。
此外,您应该使用&
来获取函数地址。
其次,您将函数指针隐式转换为 bool
变量。
明确地转换它以告诉编译器您认为您知道自己在做什么并且您对此有把握:
bool b= (void*)&ff<4>;
我只想说,为避免错误和警告而进行强制转换是个坏主意。
在大多数情况下,警告和错误可以帮助您避免数据丢失和通常会导致运行时错误的事情。
关于c++ - 将模板函数指针转换为 bool 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25933347/