【问题标题】:C++: Vector of function pointers to functions with different type of argumentsC ++:指向具有不同类型参数的函数的函数指针向量
【发布时间】:2017-03-26 06:29:34
【问题描述】:

我正在尝试为class Menu 创建一个函数指针向量。 但我不知道如何定义它,因为指向我要添加的函数的指针有不同类型的参数,有些根本没有。

我的设想是这样的:

vector<SomeReturnType(*)(SomeArgType)> functions;

我可以在哪里添加定义如下的函数:

SomeReturnType function_1(Class_1 c1);
SomeReturnType function_2(Class_2 c2);
SomeReturnType function_3();

像这样添加:

functions.push_back(function_1(object_of_Class_1));
functions.push_back(function_2(object_of_Class_2));
functions.push_back(function_3();

但这显然是不可能的。最好的方法是什么?

感谢您的关注。 干杯!

【问题讨论】:

  • 您不能将它们放在向量中。向量存储所有相同类型的东西。如果你可以将不同的类型放在一个向量中,你会如何使用它? functions[i].(??? what's inside ???) 没有办法做到“这个”,也许告诉我们你想用“这个”解决你想要解决的问题?
  • 好吧,如果先将它们全部转换为 void*,则可以将它们放入向量中。毕竟,它们只是指针。但是大概你想在某个时候调用这些函数,所以你需要知道如何将每个 void 指针转换回正确的函数签名来做到这一点。也许你真正想要的是一个 vtable,你可以通过创建一个带有虚函数的基类来获得它。
  • 可能您应该看到这里提出的类似问题的答案stackoverflow.com/questions/11037393/…

标签: c++ vector types arguments function-pointers


【解决方案1】:

您可以创建一个 vectorpairspair 的第一个元素可以设置为enum,指示函数的类型,第二个元素是类型转换为void* 的函数指针。

std::vector<pair<int, void *> > functions;

【讨论】:

  • 这听起来不错,但我太新手了,无法自己理解如何做到这一点。你能写一个简单的例子吗?我会非常感激!也感谢您的快速回答!
  • 可以这样填写向量:functions.push_back(pair); functions.push_back(pair);
  • 接下来,你可以像这样声明函数指针类型: SomeReturnType (* function_1)(Class_1 c1) f1; SomeReturnType (* function_2)(Class_2 c2) f2;
  • 接下来,当你读回向量时,你可以说: if (functions[0].first == 0) { f1 = functions[0].second; } else if (functions[0].first ==1) { f2=functions[0].second; }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-22
  • 1970-01-01
  • 1970-01-01
  • 2012-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多