如何减少定义指针功能的功能数量

发布于 2025-02-03 06:16:36 字数 672 浏览 2 评论 0原文

我在代码中实现了一些指针函数/回调,如下所示:

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/.... 有人可以帮助我减少功能。我正在考虑实现虚拟纯函数,但是我通常使用功能而不是指针函数来实现它们,因此我不知道该怎么做。如果有人能帮助我,我会很感激。 先感谢您

i'm implementing some pointer functions/Callbacks in my code as follow:

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
.
.

After a few moments I realized that I am repeating the pointer function and I am only changing my element which is Point_2d/Point_3d/....
Could someone help me to reduce the functions. I'm thinking about implementing virtual pure functions, but I usually implement them with functions and not pointer functions, so I have no idea how to do it. I would be very grateful if someone could help me.
Thank you in advance

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

空名 2025-02-10 06:16:36

由于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

}

Since C++11 (which I assume you have available as you're using nullptr), you can use an alias template:

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

}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文