将模板函数指针推入列表

时间:2014-09-09 06:15:35

标签: c++ templates

我有一个模板函数,我希望将其地址放入函数指针列表中。

我拥有的是:

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 ++下的表现如何。

非常感谢。

1 个答案:

答案 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;
}