当前位置: 首页 > 知识库问答 >
问题:

d::f可以存储指向数据成员的指针吗?

酆阳煦
2023-03-14

从参考资料中,我发现:

类模板std::function是一个通用多态函数包装器。函数的实例可以存储、复制和调用任何可调用的目标函数、lambda表达式、绑定表达式或其他函数对象,以及指向成员函数的指针和指向数据成员的指针。

我不明白为什么std::function应该能够存储这样的指针,而且我以前从未听说过这个功能。
真的有可能吗,我错过了什么或者是留档中的错误?

在这种情况下,操作符()应该如何操作
从文档中可以看出:

使用参数args调用存储的可调用函数目标。

无论如何,这里没有可调用的存储函数目标。我错了吗?

老实说,我甚至不知道这样一个函数的正确语法是什么,否则我会写一个例子来测试它。
如何使用以下模板来定义指向数据成员的指针?

template< class R, class... Args >
class function<R(Args...)>

共有1个答案

璩俊雅
2023-03-14

调用std::function的函数调用运算符的效果

R operator()(ArgTypes... args) const

相当于(§20.9.11.2.4[功能包装功能投资]/p1):

INVOKE<R>(f, std::forward<ArgTypes>(args)...)

其定义包括以下项目符号(§20.9.2[func.require]/p1):

定义调用(f,t1,t2,…,tN)如下:

[...]

1.3-t1*fN==1f是指向类T的成员数据的指针,t1T类型的对象或对T类型的对象的引用,或对从T派生的类型的对象的引用;

然后,当f是指向存储在std::function的内部调用程序中的数据成员的指针时,std::function本身应该定义一个参数,例如:

std::function<int(std::pair<int,int>)> f = &std::pair<int,int>::first;

f(std::make_pair(1, 2));

演示

 类似资料:
  • 所以我的教授喜欢用我们应该弄清楚的论文上的代码来测试我们。我不会发布代码,因为我不是在寻找答案,这只是他曾经让我们感到困惑的一件事是,当他初始化一个类的对象,然后初始化另一个类的指针指向上述对象时。它让我感到困惑,这是一个如此具体的问题,我不知道如何搜索它。例: “d- 当指针来自一个类却指向另一个类的对象时,它到底在做什么?我知道这个问题以前可能已经被回答过了,但是我在任何地方都找不到它,所以我

  • GCC 8.2.1和MSVC 19.20编译以下代码,但Clang 8.0.0和ICC 19.0.1无法这样做。 Clang 8.0.0 的错误消息如下: 我注意到它在两种情况下可以用Clang编译: 从最后一个定义中删除括性 将线 替换为

  • 是否可以将指针作为可变模板参数传递给成员。我似乎搞不懂语法。 对于函数调用,它的工作原理如下: 可以这样使用: 我希望以类似于类模板的方式传递params 应该这样使用: 我很难弄清楚什么东西应该是什么。 如果成员类型已知,并且只有一个参数,则可以这样做: 有没有一种方法来推广这个变量参数列表的成员指针,其中成员是不同的未知事先类型? 更新:用于固定已知类型的成员指针的变量参数包声明如下: 现在我

  • 指向D类的指针与指向结构的指针完全相同,并且访问指向使用成员访问运算符 - >运算符的类的指针的成员,就像使用指向结构的指针一样。 与所有指针一样,您必须在使用之前初始化指针。 让我们尝试以下示例来理解指向类的指针的概念 - import std.stdio; class Box { public: // Constructor definition this(

  • 我正在学习如何在C中使用并写了以下示例: 问:是否保证在所有情况下指向一个结构的指针都是指向它的第一个元素的完全相同的指针? 在这种特殊的情况下,它能像我预期的那样工作,但我不确定它是否能得到保证。编译器可以在开始时插入一些填充吗? 我唯一能找到的关于结构类型布局的是N1570的类型: 结构类型描述了一组按顺序分配的非空成员对象(在某些情况下,还包括一个不完整的数组),每个对象都有一个可选的指定名

  • 如果C中有指针(char*names[])和指向指针的指针(char**cur_name=names);有指向指针的指针吗? 或者指向指针的指针只是一个链表?也许这是个愚蠢的问题,但我想知道答案。