我有2类:Child
从Parent
导出:C++函数指针中的隐式类型转换?
#include <stdint.h>
#include <iostream>
using namespace std;
class Parent
{
public:
int parentMember;
};
class Child : public Parent
{
};
现在,我有用于动态阵列的自定义实现类模板(不必要的部分跳过)
template <typename T>
class DArray
{
private:
T* m_array;
int32_t m_length;
public:
// Default constructor
DArray() : m_array{ nullptr }, m_length{ 0 } {
};
// Search returns index of the first found item or -1 if not found, comparison is done
// using function pointer, which should return boolean
int32_t Search(const T& data, bool(*comparisonFunction)(T, T)) {
for (int32_t i = 0; i < m_length; i++) {
if (comparisonFunction(m_array[i], data))
return i;
}
return -1;
}
};
我有一个比较功能将用于确定我的动态数组是否已包含具有相同值的元素parentMember
bool comparisonFunction(Parent* n1, Parent* n2) {
return (n1->parentMember == n2->parentMember);
}
最后,我有我的动态数组,它应该持有指向Child
对象的指针。
int main()
{
DArray<Child*> dArray;
Child *c;
dArray.Search(c, comparisonFunction);
return 0;
}
此代码返回在这一行错误:
dArray.Search(c, comparisonFunction);
的错误是:
argument of type "bool (*)(Parent *n1, Parent *n2)" is incompatible with
parameter of type "bool (*)(Child *, Child *)"
我的问题是:为什么没有编译器隐式转换Child*
到Parent*
,因为它当我将Child*
作为参数传递给一个函数时,它会将Parent*
作为参数吗?
有什么办法如何解决这个问题,而不是为每个孩子类实现一个新的比较函数?
你不使用'任何理由std :: vector'和''? –
@appleapple我还在学习C++,我想了解它是如何工作的“幕后”:) – Riko
可能最好先了解如何正确地做到这一点。 –