它就像一個謎語。那么讓我們一一解釋。
- 我有一個驅動函式(
fD),它接收一個函式指標并在while回圈中多次呼叫它。 - 函式pointer(
fP)有一個引數class A。 - 有 3 個子類
class A,class B,C,D。 - 我希望
fP能夠接收所有子類B,C,D來代替引數A。 - Sqwiggle 錯誤提示
B與A.
當然,例子勝于謎語。
class A {};
class B : A { /* some function */ };
class C : A { /* some function */ };
class D : A { /* some function */ };
void fD(A a, void (*fP)(A))
{
for (int i = 0; i < 10; i )
{
fP(a);
}
}
void PointedFunction(B b)
{
/* Do Something with the B function */
}
void PointedFunction2(C c)
{
/* Do Something with the C function */
}
void PointedFunction3(D d)
{
/* Do Something with the D function */
}
int main()
{
// What i want to do
B b;
fD(b, &PointedFunction);
C c;
fD(c, &PointedFunction);
D d;
fD(d, &PointedFunction);
// But sqwiggle at & saying argument don't match
return 0;
};
問題:如何在函式指標中使用子類代替父類?
我很確定原因是因為我正在嘗試使用子類。由于 c 對這些東西非常嚴格。但是......我不知道如何解決這個問題。
另外,只要我知道,我正在做的事情對我來說看起來很不合適。這像..合法嗎?
uj5u.com熱心網友回復:
我認為這就是您可能想要做的:
class A {};
class B : public A {};
class C : public A {};
class D : public A {};
void fD(A& instance, void (*fP)(A&))
{
for (int i = 0; i < 10; i )
{
fP(instance);
}
}
void PointedFunction(A& a)
{
/* Do Something with the A family */
}
int main()
{
B b;
fD(b, &PointedFunction);
C c;
fD(c, &PointedFunction);
D d;
fD(d, &PointedFunction);
return 0;
};
或者,如果您有專門的方法Band C,您可以使用泛型而不是類層次結構。
class A {};
class B {};
class C {};
template<class T>
void fD(T& instance, void (*fP)(T&))
{
for (int i = 0; i < 10; i )
{
fP(instance);
}
}
void PointedFunction(B& a)
{
/* Do Something with B */
}
void PointedFunction(C& a)
{
/* Do Something with C */
}
int main()
{
B b;
fD(b, &PointedFunction);
C c;
fD(c, &PointedFunction);
return 0;
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/378899.html
上一篇:如何計算每個字串的平均值
