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

标签 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

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

最佳答案

你完全忽略了所有警告,这些警告告诉你你做错了什么。
此外,您应该使用&来获取函数地址。

其次,您将函数指针隐式转换为 bool 变量。
明确地转换它以告诉编译器您认为您知道自己在做什么并且您对此有把握:

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

我只想说,为避免错误和警告而进行强制转换是个坏主意。
在大多数情况下,警告和错误可以帮助您避免数据丢失和通常会导致运行时错误的事情。

关于c++ - 将模板函数指针转换为 bool 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25933347/

相关文章:

c++ - 指针的使用 - 非常困惑! C++

c++ - 模板化赋值运算符和自检

vba - 向用户部署 Word 宏的最简单方法?

c++ - 使用模板有条件地生成 C++ 类的数据成员

c++ - 类中的函数指针

c - C 中的牛顿拉夫函数指针

c++ - 将指针传递给结构在两个程序中的行为不同

c++ - 将函数作为参数传递给方法

java - C++ 列出用法

c++ - 将 Mach-O 可执行文件与静态库合并?