[英]C++ function pointer as template
我刚开始使用C ++,很抱歉,如果这是一个新手问题。 我搜索了整个网络,但没有发现任何相关信息。 事实上,我甚至不确定如何制定我的搜索......
我在某处看到了这段代码:
template <class T>
struct SomeStruct
{
SomeStruct() {}
};
后来,这个:
int main()
{
SomeStruct<void (Foo::*)(int test)> mStruct;
}
以上编译就好了。
因此,如果我理解正确,“void(Foo :: *)(int test)”是一个函数指针,指向Foo中的某个函数,将int作为参数并返回void。
如何成为“T类”参数的法律论据?
任何帮助,将不胜感激。
void (Foo::*)(int test)
是一种指向成员函数的指针。 这种类型的变量可用于指向类Foo
成员函数(返回void
并接受单个int
参数)。
class T
是一个用词不当 - 任意类型都可以用作模板参数(类型不必声明为class
),无论模板是使用template<class T>
还是template<typename T>
。
因此我不使用第一种形式,只使用后者。
在模板声明的模板参数列表的上下文中, typename
和class
可以互换使用,除了必须在模板模板参数中使用class
(如C ++ 1z之前的template<template<typename, typename> class>
。
它是一个函数指针类型 。 完全合法。
论证不一定是实际的阶级; class
的使用存在误导性,相当于更清晰的typename
。
如果你想真的被吓坏了,查找非类型模板参数,因为你实际上可以传递一个实际的函数指针(稍作修改)。 :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.