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