我在我的代碼中實作了一些指標函式/回呼,如下所示:
typedef WndDyn* (Edit_t)(Point2d* pThis, const EditParams& EditParams);
Edit_t g_Edit_CB{ nullptr };
typedef WndDyn* (*Show_t)(const Point2d* pThis, const EditParams& EditParams);
Show_t g_Show_CB{ nullptr };
// Punkt3d
typedef WndDyn* (*Edit3d_t)(Point3d* pThis, const EditParams& EditParams);
Edit3d_t g_Edit3d_CB{ nullptr };
typedef WndDyn* (*Show3d_t)(const Point3d* pThis, const EditParams& EditParams);
Show3d_t g_Show3d_CB{ nullptr };
.
.
// Vector2d
.
.
片刻之后,我意識到我正在重復指標功能,而我只是在更改我的元素,即 Point_2d/Point_3d/...。有人可以幫我減少這些功能。我正在考慮實作虛擬純函式,但我通常用函式而不是指標函式來實作它們,所以我不知道該怎么做。如果有人可以幫助我,我將不勝感激。先感謝您
uj5u.com熱心網友回復:
由于 C 11(我假設您在使用時可用nullptr),您可以使用別名模板:
template <typename T>
using EditParamsCallback_t = WndDyn* (*)(T, const EditParams&);
int main() {
using Edit_t = EditParamsCallback_t<Point2d*>;
Edit_t g_Edit_CB{nullptr};
using Show_t = EditParamsCallback_t<const Point2d*>;
Show_t g_Show_CB{nullptr};
// Punkt3d
using Edit3d_t = EditParamsCallback_t<Point3d*>;
Edit3d_t g_Edit3d_CB{nullptr};
using Show3d_t = EditParamsCallback_t<const Point3d*>;
Show3d_t g_Show3d_CB{nullptr};
// Vector2d
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/483983.html
