我有一个以函数指针作为参数的模板函数,以及一个像这样的普通函数:
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/