繁体   English   中英

C ++函数指针作为模板

[英]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>

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

在模板声明的模板参数列表的上下文中, typenameclass可以互换使用,除了必须在模板模板参数中使用class (如C ++ 1z之前的template<template<typename, typename> class>

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM