http://bbs.csdn.net/topics/390010520
1
2
3
4
5
|
template
<
typename
PktType>
typedef
int
(* CallbackFunPtrType) (
const
PktType& CurPkt);
//1,提示编译错误
template
<
typename
PktType>
int
(* CallbackFunPtr1) (
const
PktType& CurPkt);
//2,提示编译错误
|
现在需要定义一个指向模板函数的函数指针类型,查了相关资料得知现在c++好像不支持这个特性。
vs2008发现,不但不能用typedef定义指向模板函数的函数指针类型,1处所示;连定义一个指向模板函数的函数指针都不可以,2处所示。
有没有其他巧妙的方法可以实现?求赐教!
c++11 14/1 says
A template defines a family of classes or functions or an alias for a family of types.
因此,不存在 function pointer template.
另外,你的概念似乎有些混淆。c++ 标准中不存在模板函数的概念,因此也不存在"模板函数的函数指针"。c++ 中只有函数模板,注意函数模板是一个模板,不是函数,因此也不存在指向它的指针。
你还是说说到底要干嘛吧,说不定不用这么麻烦呢。
如果LZ是需要一个指向函数模板的指针的话,建议参考STL中仿函数的实现
你可以用你现在需要被指向的函数当做一个参数传给仿函数的构造器,然后重载()运算符即可
你还是没理解我的意思,模板可以作为参数这点没错,但是这里不同。LZ的两种形式 1.typedef是想定义一个类型别名,很明显这个指针的类型根本不确定 2.声明一个指针,同样这个指针的类型也不确定。当然编译无法通过。而你所说的作为参数 我们在使用的时候在传递参数的时候不会出现类型不确定这回事。
template <typename PktType>
struct Wrapper
{
typedef int (* CallbackFunPtrType) (const PktType& CurPkt);
};
这样不就行了
用的时候就
Wrapper<int>::CallbackFunPtrType callback=....
支持C++11的话,用std::function。不支持的话,用boost::function。