C ++函数指针作为模板

时间:2015-09-11 19:16:33

标签: c++ function templates pointers

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

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

template <class T>
struct SomeStruct
{
    SomeStruct() {}
};

后来,这个:

int main()
{
    SomeStruct<void (Foo::*)(int test)> mStruct;
}

以上编辑就好了。

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

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

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:8)

<section class="intro" data-stellar-background-ratio="0.5"> </section> 是一种指向成员函数的指针。这种类型的变量可用于指向类void (Foo::*)(int test)的成员函数(返回Foo并采用单个void参数)。

int在那里用词不当 - 任意类型都可以用作模板参数(类型不必声明为class T),无论模板是否使用{{1声明}或class

出于这个原因,我不使用第一种形式,只使用后者。

在模板声明的模板参数列表的上下文中,template<class T>template<typename T>可以互换使用,但您必须在模板模板参数中使用typename(例如class之前) C ++ 1Z。

答案 1 :(得分:5)

这是一个函数指针 type 。完全合法。

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

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