首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在MSVC中获得成员函数指针?

如何在MSVC中获得成员函数指针?
EN

Stack Overflow用户
提问于 2016-07-12 10:15:30
回答 2查看 319关注 0票数 1

我不打算过多地讨论Excel方面的细节,我基本上从下面的例子中获得了代码:

C++应用程序自动化Excel (CppAutomateExcel)

solution1.cpp

因此,我在MSVC中尝试了这段代码,它编译了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class foo { public: virtual void bar(){} };

int main()
{
    void (foo::*p)() = &foo::bar;
}

但是,在Excel中捕获move函数地址的类似代码不起作用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int main()
{
    Excel::_ApplicationPtr spXlApp;
    HRESULT hr = spXlApp.CreateInstance(__uuidof(Excel::Application));
    Excel::WorkbooksPtr spXlBooks = spXlApp->Workbooks;
    Excel::_WorkbookPtr spXlBook = spXlBooks->Add();
    Excel::_WorksheetPtr spXlSheet = spXlBook->ActiveSheet;
    HRESULT(Excel::_Worksheet::*pMove)(...) = &spXlSheet->Excel::_Worksheet::Move;

    <... irrelevant code ...>

    return 0;
}

这有以下编译器错误:

错误C2276:'&':绑定成员函数表达式的非法操作

如果我删除了&,它会说我应该将它添加回:

错误C3867:'Excel::_Worksheet::Move':非标准语法;使用'&‘创建指向成员的指针

如能在此提供任何帮助,我们将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-12 12:11:40

您需要像下面这样声明方法指针:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// or whatever parameter type Move() actually uses...
void (Excel::_Worksheet::*pMove)(tagVARIANT, tagVARIANT) = &Excel::_Worksheet::Move;

然后,要真正调用pMove(),您必须这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Excel::_WorksheetPtr spXlSheet = ...;
(spXlSheet.Get()->*pMove)(...);
票数 1
EN

Stack Overflow用户

发布于 2016-07-12 10:47:52

你在问题中说“但是类似的代码.”然后显示代码,在代码中,您不做相同的事情。尝试使用与在较小示例中设置pMove时使用的相同语法来设置p。尝试类似于&Excel::_Worksheet::Move; (没有"spXlSheet->")的东西。

如果您可以指定在设置函数指针时调用函数指针的对象的特定实例,我不知道这样的功能。从设置变量的位置删除spXlSheet->后,在要调用函数指针的地方使用它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38336209

复制
相关文章
【C++】C++ 类中的 this 指针用法 ② ( 常量成员函数 | const 修饰成员函数分析 )
在 C++ 类中 , 普通的非静态成员函数 , 可以使用 const 进行修饰 ,
韩曙亮
2023/10/15
2310
【C++】C++ 类中的 this 指针用法 ② ( 常量成员函数 | const 修饰成员函数分析 )
c++之空指针访问成员函数
#include<iostream> using namespace std; class Person { public: int age; void showClass() { cout << "这是Person类" << endl; } void showAge() { //解决方法,如果是空就直接返回 if (this == NULL) { return; } co
西西嘛呦
2020/08/26
6190
【C语言笔记】函数指针作为结构体成员
在C语言程序中,数据结构和算法是两个基本的元素。C语言的基本数据类型、结构体、数组和联合体是数据结构的代表;C语言中的函数则是算法的代表。只有将数据结构和算法有机结合才能构成具有一定功能的程序。
正念君
2019/06/26
3.9K0
【C语言笔记】函数指针作为结构体成员
让类成员函数指针成为可调用对象
    类成员函数指针实践上是一个指针类型,不可直接通过调用运算符()作为可调用对象调用,一般调用该类成员函数指针需要指定该指针对应的对象。
学徒漠筱歌
2022/07/17
1.1K0
VC和GCC成员函数指针实现的研究(三)
因为是兼容虚继承和非虚继承的,所以赋值的部分的汇编是一样的。这里就不贴了。关键在于执行期它是怎么找到虚基类的。请往下看:
owent
2018/08/01
8240
VC和GCC成员函数指针实现的研究(三)
不报错地调用空指针类的成员函数
  前两个应该都会段错误才对的呀,怎么都运行正常了。其实上述的行为都由this指针左右结果。
Qt君
2019/10/24
1.2K0
VC和GCC成员函数指针实现的研究(二)
调用的时候主要看(c.*vptr2)()的代码。因为(c.vptr1)()生成的和单继承一样。而由于它们最终都转向vcall,所以vptr2的时候调整了虚表指针为c的第二个虚表。顺便把this指针地址调整了。
owent
2018/08/01
6980
VC和GCC成员函数指针实现的研究(二)
【C++】静态成员函数 ( 静态成员函数概念 | 静态成员函数声明 | 静态成员函数访问 | 静态成员函数只能访问静态成员 )
静态成员函数归属 : 在 C++ 类中 , 静态成员函数 是一种 特殊的函数 , 该函数属于类 , 而不是属于 类实例对象 ;
韩曙亮
2023/10/15
1.6K0
【C++】静态成员函数 ( 静态成员函数概念 | 静态成员函数声明 | 静态成员函数访问 | 静态成员函数只能访问静态成员 )
C++中的const成员变量和成员函数
在类中,如果你不希望某些数据被修改,可以使用const关键字加以限定。const 可以用来修饰成员变量和成员函数。
芯动大师
2023/10/14
3210
C++中的const成员变量和成员函数
VC和GCC内成员函数指针实现的研究(一)
最近在《C++对象模型》一书里说到的virtual的成员函数指针,低于128的被cfront编译器认为是虚表偏移量(支持子类对父类函数的覆盖)。VC只是提了下单继承、多继承和虚继承的实现方案不同,GCC没有提及,所以就专门稍微深入分析研究下他们的实现机制。
owent
2018/08/01
8520
VC和GCC内成员函数指针实现的研究(一)
VC和GCC内成员函数指针实现的研究(一)
最近在《C++对象模型》一书里说到的virtual的成员函数指针,低于128的被cfront编译器认为是虚表偏移量(支持子类对父类函数的覆盖)。VC只是提了下单继承、多继承和虚继承的实现方案不同,GCC没有提及,所以就专门稍微深入分析研究下他们的实现机制。
owent
2023/03/17
5470
VC和GCC内成员函数指针实现的研究(一)
指向类成员的指针
关注点在于 count_fruit 的第三个参数,这样就省去了单独编写 count_apples 和 count_oranges 函数的麻烦。
ClearSeve
2022/02/10
8170
C++ this指针:用于在成员函数中指向调用该函数的对象
C++中this指针是一个指向当前对象的指针。在成员函数中,可以使用this指针来访问调用该函数的对象的成员变量和成员函数。
很酷的站长
2023/08/25
2650
C++ this指针:用于在成员函数中指向调用该函数的对象
成员函数
输入n个学生的信息,每个学生的信息包括姓名、身高、学号。变成输出身高最高的学生信息。
全栈程序员站长
2022/09/07
5800
C++类成员指针
成员指针是C++引入的一种新机制,它的申明方式和使用方式都与一般的指针有所不同。成员指针分为成员函数指针和成员数据指针。
恋喵大鲤鱼
2018/08/03
1.4K0
C++ 类成员指针
成员指针是 C++ 引入的一种新机制,它的申明方式和使用方式都与一般的指针有所不同。成员指针分为成员函数指针和数据成员指针。
恋喵大鲤鱼
2022/11/29
8020
C++类的成员函数 | 成员函数
在C++中,类的成员函数是函数的一种,它有返回值和函数类型,它与一般函数的区别只是:
小林C语言
2021/01/18
1.9K0
C++类的成员函数 | 成员函数
c++系列之二 指向成员函数的指针(烧脑)
这是一篇翻译的文章,原文详细解释了C++中指向成员函数的指针,因为带有“教程”一词,所以比较通俗易懂。为了使文章读起来通俗有趣,翻译君并未一字一句一板一眼地翻译,并大量使用了诙谐的词汇(如“码农”)。另外,原文的某些地方分段不太合适(小学语文可能是体育老师教的。。),有些地方也稍嫌啰嗦,所以翻译君自己作了一些调整。如果对翻译君的翻译质量有意见,建议前往 原地址 围观。
程序员小王
2019/05/05
3.1K0
c++系列之二 指向成员函数的指针(烧脑)
指针在函数中的作用
指针传递地址时,指针变量产生了副本,但副本与原变量所指的内存区域是同一个。对指针副本指向的变量进行改变,就是改变原指针变量所指向的变量。
跋扈洋
2022/04/27
2.9K0
指针在函数中的作用
qsort中的函数指针,及函数解释
拿掉第四个参数后,很容易理解,它是一个无返回值的函数,接受4个参数,第一个是void*类型,代表原始数组,第二个是size_t类型,代表数据数量,第三个是size_t类型,代表单个数据占用空间大小,而第四个参数是函数指针。这第四个参数,即函数指针指向的是什么类型呢?
用户4645519
2020/09/08
6400

相似问题

如何获得指向成员函数的函数指针

18

如何获得指向成员函数的指针?

12

MSVC:具有const和非const重载的成员函数指针的推断

41

如何在MSVC中获得指向二进制部分的指针?

43

成员函数指针到成员函数

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文