【发布时间】:2020-08-06 07:17:27
【问题描述】:
在我的代码中,我有几个类,每个类都有不同的方法。例如:
class A {
public:
int sum(int a, int b);
bool isScalable(double d);
}
class B {
public:
std:string ownerName();
}
我的目标是创建如下所有函数名称的映射
std::map<std::string, FnPtr> myMap;
// Add the newly implemented function to this map
myMap["sum"] = &A::sum;
myMap["isScalable"] = &A::isScalable;
myMap["myMap"] = &B::myMap;
问题是我不知道如何定义FnPtr。你能帮帮我吗?
【问题讨论】:
-
你想达到什么目的?您可以使用
void *作为类型并根据需要进行强制转换,但这通常是个坏主意。可能有更好的方法来解决您的潜在问题。 -
@BennyK:我想将每个函数映射到一个字符串。这是因为有来自应用程序外部的字符串格式的消息,我需要根据字符串调用函数。例如。调用sum(10,15),收到的消息是“sum 10 15”
-
见:this question。您可能不想这样做,调用这些函数中的任何一个都非常脆弱。
-
很难想出一个合理的方案来解决问题
-
只需在第一个单词上使用 switch case。 Switch 至少应该和 std::map 一样快。
标签: c++ c++11 templates function-pointers