C++函数指针作为模板

Wil*_*mer 4 c++ templates pointers function

我刚开始使用C++,很抱歉,如果这是一个新手问题.我在网上搜索过,但没有发现任何相关信息.事实上,我甚至不确定如何制定我的搜索......

我在某处看到了这段代码:

template <class T>
struct SomeStruct
{
    SomeStruct() {}
};
Run Code Online (Sandbox Code Playgroud)

后来,这个:

int main()
{
    SomeStruct<void (Foo::*)(int test)> mStruct;
}
Run Code Online (Sandbox Code Playgroud)

以上编译就好了.

因此,如果我理解正确,"void(Foo ::*)(int test)"是一个函数指针,指向Foo中的某个函数,将int作为参数并返回void.

如何成为"T类"参数的法律论据?

任何帮助,将不胜感激.

mil*_*bug 8

void (Foo::*)(int test)是一种指向成员函数的指针.这种类型的变量可用于指向类的成员函数Foo(返回void并接受单个int参数).

class T在那里是一个用词不当 - 任意类型都可以用作模板参数(类型不必声明为class),无论模板是否用template<class T>或声明template<typename T>.

因此我不使用第一种形式,只使用后者.

在模板声明的模板参数列表的情况下,typenameclass可以互换使用,除非你必须使用class模板模板参数(如template<template<typename, typename> class>之前的C++ 1Z.


Lig*_*ica 5

它是一个函数指针类型.完全合法.

论证不一定是实际的阶级; 使用class有误导性,相当于更清晰typename.

如果你想真的被吓坏了,查找非类型模板参数,因为你实际上可以传递一个实际的函数指针(稍作修改).:)