gpt4 book ai didi

C++函数指针作为模板

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:03:59 28 4
gpt4 key购买 nike

我刚开始使用 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>

关于C++函数指针作为模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32530665/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com