我刚开始使用C ++,很抱歉,如果这是一个新手问题。我搜索了整个网络,但没有发现任何相关信息。事实上,我甚至不确定如何制定我的搜索......
我在某处看到了这段代码:
template <class T>
struct SomeStruct
{
SomeStruct() {}
};
后来,这个:
int main()
{
SomeStruct<void (Foo::*)(int test)> mStruct;
}
以上编辑就好了。
因此,如果我理解正确,“void(Foo :: *)(int test)”是一个函数指针,指向Foo中的某个函数,将int作为参数并返回void。
如何成为“T类”参数的法律论据?
任何帮助都将不胜感激。
答案 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
。
如果你想真的被吓坏了,查找非类型模板参数,因为你实际上可以传递一个实际的函数指针(稍作修改)。 :)