c++ - 调用一个函数而不明确引用它根据输入而改变

标签 c++ pointers reference typedef non-repetitive

我正在尝试创建一个尽可能高效的速度距离和时间计算器,并希望使用根据输入而变化的指针来调用函数,但我不确定如何操作。我尝试了很多不同的东西:

我最好的尝试:

// Inside class Math
double calcSpeed(double distance, double time); // These functions return a double value of the formula (non static)
double calcDistance(double speed, double time);
double calcTime(double speed, double distance);

// Inside Main
typedef double (Math::*FuncChosen)(double first, double second);
FuncChosen p = &Math::calcSpeed; // This changes according to input to different functions in Math class with same parameter types and return types
p(1, 2); // Not a function, how can I non explicitly call the function?

有没有一种方法可以在不使用指针或其他方式显式引用它的情况下调用这个函数。就像从根据输入变化的指针调用函数一样? 我真的不知道从哪里开始以及使用什么,因为我尝试的一切都是非法的。我基本上想在运行时选择函数而不使用多个 if,从而避免重复。 (我发现有人有类似的问题,但没有找到一种有效的方法来实现我的目的。)

提前致谢

而且,是的,我是 C++ 的新手,对指针/引用和内存的处理不多。

编辑:供引用,汉化,完整code更正后-可编译

最佳答案

您还没有包含 MCVE , 但注释和代码表明这些函数是 Math 类中的非静态成员函数。 FuncChosen 类型是一个指向成员函数的指针。

指向成员的指针是奇怪的野兽。它不是真正的指针,因为它不直接指向任何东西。将指向成员的指针视为“类中的标识符”。因此,p 标识了一个特定的成员函数(例如 calcSpeed)。正如您通常只能通过在对象上调用成员函数来调用它一样,您需要提供一个对象以通过指向成员的指针进行调用。因此,例如,如果您有以下代码:

Math m;
double res = m.calcSpeed(1.0, 2.0);

然后与指向成员的指针 p 的等价物将是:

Math m;
FuncChosen p = &Math::calcSpeed;
(m.*p)(1.0, 2.0);

运算符.*(以及相应的->*)用于取消引用指向成员的指针。


为了完整性:以上内容适用于非静态成员函数。如果 calcSpeed 等是static 成员函数,您将使用指向函数的普通指针来引用它们。

关于c++ - 调用一个函数而不明确引用它根据输入而改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26604475/

相关文章:

c++ - Mac VSCode 调试器总是显示关于 ';' 和 ':' 的错误

C++ - 输出语句的顺序不一致

c++ - 用于动态集群中分布式计算的 C/C++ 框架

c# - 通过引用比较?

php - 在函数参数之前使用 & 的目的是什么?

c++ - QT C++ 错误 : undefined reference to `vtable for appprinter'

c - 为什么更改指向数组名称的指针会改变结果?

c - 我如何使用指针来使用 malloc 存储多个字符串

c - 在哪里可以了解有关指针的更多信息?

C# 项目看不到 Excel COM Reference