我已经使用该网站很长时间了,它为我解答了无数问题。我已经编程很长时间了,但我是 C++ 的新手。这是我的第一个问题。
我需要一个包含成员函数指针的数组。数组将指向的函数具有相同的参数和返回类型,但属于不同类的成员。是否可以将指向不同类的成员函数的指针存储在同一个数组中?
最佳答案
假设您要将 pointer-to-member 类型的指针按字面意思存储在数组中,答案是:视情况而定。这取决于你的类之间是否存在层次关系。
如果你的类完全不相关,那么你只能reinterpret_cast
你指向一些常见类型的指针,比如 void (SomeArbitraryClass::*)()
然后 reinterpret_cast
在执行调用时将它们恢复为原始类型。这基本上是一个“否”的答案,因为这只不过是一个相当丑陋的 hack。
(或者,正如 Dietmar Kühl 所建议的那样,您可以使用类型删除技术,例如 std::function<>
在 C++11 中提供的技术,将可调用对象存储在您的数组中。此类对象将不是指向成员的指针不过现在。)
但如果您的类是同一类层次结构的成员,那么您可以相信 C++ 类成员指针是逆变这一事实。这意味着指向基类成员的指针可以隐式转换为指向派生类成员的指针。即使它们不在反向隐式转换,该语言也通过 static_cast
支持这种转换。 .所以,你必须给数组元素类型 R (CommonBaseClass::*)(Args)
并使用 static_cast
填充数组时为该类型。在这种情况下,您不必在执行调用时将这些指针转换回原始类型 - 语言将自行正确地完成所有操作(假设您在取消引用指针时提供正确类型的对象)。
关于成员函数指针的 C++ 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19191813/