c++ - 如何从另一个嵌套类中调用某个封闭类的嵌套类的函数指针成员的值?
问题描述
这是一个非常复杂的问题,但我试图从我的实际代码库中尽可能地简化代码。假设我有一些T
带有嵌套类的类S
和M
. 我有一些方法method1
和method2
,S
并且我还有一个指针selectedMethod
,默认情况下指向这两种方法中的一种method1
。
class T
{
class S
{
T &t;
double method1(std::vector <double> params);
double method2(std::vector <double> params);
double (S::*selectedMethod)(std::vector <double>) = &S::method1;
}
class M
{
T &t;
double method3(std::vector <double> vec);
}
S s;
M m;
}
如图所示,我存储了和T
的实例,S
并分别对应于使用指针。M
s
m
t
接下来,假设我想selectedMethod
调用method3
. M
为什么必须这样做:
double T::M::method3(std::vector <double> vec){
double ret = (&t.s->*t.s.selectedMethod)(vec);
return ret;
}
而不是简单地
double T::M::method3(std::vector <double> vec){
double ret = (*t.s.selectedMethod)(vec);
return ret;
}
? 对我来说,前缀&t.s->
似乎是多余的。
解决方案
对我来说,前缀
&t.s->
似乎是多余的
看起来只是这样,因为您将指向成员的指针存储在调用成员的同一对象内。但考虑到一般情况
auto foo_ptr = &SomeClass::foo;
SomeClass obj;
(obj*.foo_ptr)();
语法的两个部分都是必需的。一个显然表示成员,而另一个表示正在访问的对象。
在您的特殊情况下,对象可能“出现”两次,但表达式的两端仍然表示不同的事物。在右手边t.s.selectedMethod
仍然只指定指针。编译器没有义务检查表达式并从中推断出对象。
推荐阅读
- java - Java regex Matcher.matches 函数不匹配整个字符串
- java - Arraylist to Hashmap,每行具有多个值和唯一键?
- c# - 不使用统一输入系统向前移动(while 循环错误)
- django - 使用 Django Rest Framework 根据参数动态序列化对象的最佳方法
- visual-studio-code - 状态 0,StatusText:未知错误,名称:HttpErrorResponse
- swift - 从 UIHostingController 中的单元格导航到 SwiftUI 视图
- javascript - 如何从值列表中获取特定值?
- python-3.x - 如何让 pygame 在安装 OS X Big Sur 时访问其模块(例如字体、图形)?
- sql - 如何在 JPA @Column columnDefinition 中包含 CHECK?
- react-native - React Native 地图标记和标记标注上的图标未呈现