首页
社区
课程
招聘
C++ 20以下 如何用 decltype 将类成员函数地址存储+执行?
发表于: 2023-2-20 16:56 6048

C++ 20以下 如何用 decltype 将类成员函数地址存储+执行?

2023-2-20 16:56
6048

C++20以下,如何

 

我想实现的是:将类成员函数指针存起来
方便调用 , 比如有这么些函数

1
2
3
4
void menu1();
void menu2();
void menu3();
void menu4();

但是现在只能实现全局函数类型的

 

全局函数函数用 decltype 描述后,很容易实现

全局函数

1
2
3
using TMessageBoxA = decltype(::MessageBoxA);
auto msgBox3 = std::function<TMessageBoxA>(reinterpret_cast<TMessageBoxA*>(&::MessageBoxA));
msgBox3(0, "可以调用全局函数", "成功", 0);

类成员函数

但是仿写,调用类成员函数却不行

 

实在不知如何实现

1
2
3
4
5
6
7
using TFunMenu = decltype(CDlgCallDeclDlg::menu1);
 
// error C2269: 无法创建指向限定函数类型的指针或引用(需要指向成员的指针)
auto Fun_Menu1 = std::function<TFunMenu>(reinterpret_cast<TFunMenu*>(&CDlgCallDeclDlg::menu1));
 
// 无法实现
Fun_Menu1();

不知道问题出在哪


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 1
支持
分享
最新回复 (3)
雪    币: 5676
活跃值: (4374)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
std::mem_fn
6ffK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6W2L8W2)9J5k6h3y4H3M7s2u0W2k6X3g2J5k6h3&6U0k6g2)9J5k6h3y4G2L8g2)9J5c8Y4N6Q4x3V1k6U0M7s2m8Q4x3V1k6#2N6r3W2D9K9i4c8&6i4K6u0r3k6Y4g2F1j5%4c8A6L8$3&6S2L8q4)9J5c8X3#2W2L8g2)9#2k6X3k6F1
2023-2-20 18:47
1
雪    币: 1051
活跃值: (3593)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
无心红叶 std::mem_fn 2d2K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6W2L8W2)9J5k6h3y4H3M7s2u0W2k6X3g2J5k6h3&6U0k6g2)9J5k6h3y4G2L8g2)9J5c8Y4N6Q4x3V1k6U0M7s2m8Q4x3V1k6#2N6r3W2D9K9i4c8&6i4K6u0r3k6Y4g2F1j5%4c8A6L8$3&6S2L8q4)9J5c8X3#2W2L8g2)9#2k6X3k6F1
2023-2-20 19:59
0
雪    币: 1314
活跃值: (393)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
无心红叶 std::mem_fn 2c2K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6W2L8W2)9J5k6h3y4H3M7s2u0W2k6X3g2J5k6h3&6U0k6g2)9J5k6h3y4G2L8g2)9J5c8Y4N6Q4x3V1k6U0M7s2m8Q4x3V1k6#2N6r3W2D9K9i4c8&6i4K6u0r3k6Y4g2F1j5%4c8A6L8$3&6S2L8q4)9J5c8X3#2W2L8g2)9#2k6X3k6F1
厉害了 ,  非常感谢
函数模板std :: mem_fn生成指向成员的指针的包装对象,该对象可以存储,复制和调用指向成员的指针。
2023-2-21 02:42
0
游客
登录 | 注册 方可回帖
返回