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