C++ 使用指向相同函数的指针作为模板参数是否总是会导致相同的实例化?

标签 c++ templates function-pointers

我有一个以函数指针作为参数的模板函数,以及一个像这样的普通函数:

template <void()>
int foo() {static int c = 0; return ++c;}
void bar() {}

如果我理解正确,两个不同的函数指针可以有不同的二进制表示,即使使用它们会调用同一个函数。这是否也适用于它们用作模板参数的情况?

将“指向bar的指针”(在不同时间从不同地方获得,但调用函数指针会调用bar)传递给foo 总是调用相同的 foo 实例化?

最佳答案

指向bar 函数的任何两个指针应相等。摘自 C++ 11 规范草案:5.10 2 ... 如果两个指针都指向相同的函数,则它们比较相等

所以我无法想象为什么将不同的指针传递给 bar 会创建不同的 foo 实例化,因为所有这些指针在每个规范中都是相等的。

关于C++ 使用指向相同函数的指针作为模板参数是否总是会导致相同的实例化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30863861/

相关文章:

c++ - typedef 更改具有不同类型名称的值名称

c++ - Mac 上的 QDir 绝对路径

C++ 如何在 def 文件中指定命名空间

c++ - 是否可以使用 C++ 模板函数来接受任何类型 T 的集合?

c++ - 使用 NULL 参数实例化模板类

有人可以解释这是什么意思吗?无效(*func)();

c++ - 使用\clr 的 C++ DLL 的 LoadLibrary 出现莫名其妙的错误 193

c++ - 每当表达式未定义时,在 C++ 中启用函数模板

c++ - 类的条件执行

python - 为什么我不能将 python 的打印分配给变量?