我有一个模板函数,我希望将其地址放入函数指针列表中。
我拥有的是:
typedef void (*NavFunc)(int);
std::list<NavFunc> List;
template<class T>void Func(int) { //Matches NavFunc-Declaration
List.push_back(&Func<T>);
//doOtherStuff
}
这会引发错误
No match found for _STL::list<void (*)(int),_STL::allocator<void (*)(int)> >::push_back(void (*)(int))
但是,如果我这样做:
template<class T>void Func(int) { //Matches NavFunc-Declaration
NavFunc F = &Func<T>;
List.push_back(F);
//doOtherStuff
}
它完美地运行......我现在不能得到的是'为什么'。如果我不使用缓冲变量,它不应该也能正常工作吗?
我目前在Windows下使用BCB 6,我不知道它在g ++下的表现如何。
非常感谢。
答案 0 :(得分:0)
以下在gcc-4.8.2
中正常工作。
我猜这是BCC 6的问题?
#include <list>
typedef void (*NavFunc)(int);
std::list<NavFunc> List;
template<class T>
void Func(int)
{
List.push_back(&Func<T>);
}
int main()
{
Func<int>(5);
return 0;
}