gpt4 book ai didi

c++ - 记录 std::function 参数的最佳实践

转载 作者:太空狗 更新时间:2023-10-29 19:57:39 24 4
gpt4 key购买 nike

当使用 std::function 声明类型时,我发现我无法将参数名称分配给模板参数。例如,我找到了这个简单的函数指针类型声明:

typedef void (*ArcCallback)(
void *object,
double x_start, double y_start,
double x_finish, double y_finish,
double x_center, double y_center,
bool counterclockwise);

比这个 std::function 类型声明更具可读性:

typedef std::function<void(
void *,
double, double,
double, double,
double, double,
bool)> ArcCallback;

尽管使用 std::function 带来了灵 active (例如,能够分配 lambda 或 std::bind 调用的结果), 我错过了参数名称。当然,我可以在 std::function 声明中添加注释,但结果很笨拙。更重要的是,我认为 IDE 不会使用这些注释来提供参数提示。

其他有经验的 C++ 从业者如何记录 std::function 的模板参数的用途?广泛使用的库是否有大量使用此类类型的先例?

最佳答案

对于这个特定的代码,问题不在于 std::function 没有很好的方法来记录参数,问题在于 8 个参数对于任何一个来说可能太多了 功能。引入额外的类型可以大大有助于清理这个问题。

typedef void* CallbackObject;

struct Point {
double x;
double y;
};

enum CircularDirection {
CLOCKWISE,
COUNTERCLOCKWISE
};

struct ArcCallbackParam {
CallbackObject object;
Point start;
Point finish;
Point center;
CircularDirection direction;
};

typedef std::function<void(const ArcCallbackParam&)> ArcCallback;

编辑:我意识到这并不能直接回答您的问题。为了回答您的问题,除了评论参数之外,我不知道有任何“解决方案”,但是添加类型和 typedef 会有很大帮助。

关于c++ - 记录 std::function 参数的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31323375/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com