首页 > 解决方案 > 包装介绍性标准功能

问题描述

所以,我没有理由使用std::function这种说法。就我所读到的内容而言,以下语句可以使用std::function.

这句话应该怎么看?写着std::function

template <class T>
class CFooTemplate
{
public:
    typedef void (T::*FOO_STATE)(void);

稍微解释一下,写作背后的逻辑。

标签: c++std-function

解决方案


我不完全确定你的意思,但我会试一试。

这句话应该怎么看?写着std::function

如果我理解正确,您的意思是这一行:typedef void (T::*FOO_STATE)(void);

在这种情况下,你会写typedef std::function<void()> FOO_STATE;

这是因为您使用的是指向(成员)函数的指针。函数本身的签名是void(),在 C++ 中等同于void(void)您使用的签名。

std::function获取原始签名(例如void()or void(void))并为该通用签名的任何函数创建多态包装器,无论是普通函数、成员函数还是类似函数的对象。


推荐阅读