gpt4 book ai didi

c++ - 如何从另一个嵌套类中调用某个封闭类的嵌套类的函数指针成员的值?

转载 作者:行者123 更新时间:2023-12-02 10:16:01 25 4
gpt4 key购买 nike

这是一个令人费解的问题,但我尝试从实际代码库中尽可能简化代码。假设我有一些带有嵌套类TSM类。我有一些method1的方法method2S,还有一个指针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的实例, Ms的实例分别对应于 mt的实例。

接下来,假设我要在 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->似乎是多余的。

最佳答案

To me the prefix &t.s-> seems redundant



似乎只有这种方式,因为您将指向成员的指针存储在调用该成员的同一对象内。但考虑到一般情况
auto foo_ptr = &SomeClass::foo;
SomeClass obj;

(obj*.foo_ptr)();

语法的两个部分都是必需的。一个显然表示成员,而另一个表示正在访问的对象。

在您的特殊情况下,对象可能会“出现”两次,但是表达式的两端仍表示不同的事物。在右侧 t.s.selectedMethod仍然仅指定指针。编译器没有义务检查表达式并从中求出对象。

关于c++ - 如何从另一个嵌套类中调用某个封闭类的嵌套类的函数指针成员的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61920083/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com