Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 函数指针的通用映射。有可能吗?还有别的选择吗?_C++ - Fatal编程技术网

C++ 函数指针的通用映射。有可能吗?还有别的选择吗?

C++ 函数指针的通用映射。有可能吗?还有别的选择吗?,c++,C++,我想知道是否有可能用一个对象的多个函数指针成员创建一个映射 这可能吗?此方法可以具有不同的返回类型或输入参数 如果没有,(我想这篇文章阅读了很多相关的主题),我想用一种典型的方式来完成,例如在GUI中,如果您更改了一些参数,然后必须调用一个setter或另一个setter,这取决于您更改的文本框 是否有任何设计模式可以在不使用巨型if/else结构的情况下实现这一点 提前谢谢 在这里查看我的问题: 这种方法与之类似,但与直接存储函数指针不同的是,您将拥有一个结构 enum ArgumentTyp

我想知道是否有可能用一个对象的多个函数指针成员创建一个映射

这可能吗?此方法可以具有不同的返回类型或输入参数

如果没有,(我想这篇文章阅读了很多相关的主题),我想用一种典型的方式来完成,例如在GUI中,如果您更改了一些参数,然后必须调用一个setter或另一个setter,这取决于您更改的文本框

是否有任何设计模式可以在不使用巨型if/else结构的情况下实现这一点


提前谢谢

在这里查看我的问题:

这种方法与之类似,但与直接存储函数指针不同的是,您将拥有一个结构

enum ArgumentType
{
  BOOL,
  INT,
  whatever
};

struct FunctionDecl
{
  void *function;
  ArgumentType returnType;
  ArgumentType arguments[];
}

我很好奇你打算怎么称呼这些指针。(这也可能会影响你得到的答案)你不能(可移植地)将函数指针存储在数据指针中。你如何调用函数?不可移植,但可移植性不是一个要求。要调用它们,您可以强制转换它们,但请记住,这可能会导致未定义的行为,这些行为主要取决于机器、编译器等。一个更好的解决方案必须有一个<代码>联合<代码>,以拥有一组预定义的指针函数。至少在英特尔C++编译器12和Visual C++ 2010×64 64的Windows下,函数DECL结构的函数参数在编译时从空隙*转换为“类::())。@auroras这种方法无论如何都不适用于类成员函数,因为指向成员函数的指针通常大于
void*
。此外,这种解决方案根本不可伸缩。假设所有函数都有3个参数并返回
void
。这就是8个
case
语句来覆盖所有可能的函数调用。现在,假设您还想支持3种不同的返回类型。。。