记录std::函数参数的最佳实践
Best practice for documenting std::function parameters
当使用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
带来了灵活性(例如,能够分配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可以帮助很多。
原始ArcCallback
typedef中的参数名称仅用于自我文档目的。既然您有使用"冗余"参数名的习惯,那么您为什么不在std::function
的情况下也做同样的事情呢?
typedef std::function<void (
void *object,
double x_start, double y_start,
double x_finish, double y_finish,
double x_center, double y_center,
bool counterclockwise)> ArcCallback;
语言不禁止这样做
相关文章:
- 在 C++ 中将非指定类型作为参数传递的最佳方法?
- 读取大文件(>2GB)(文本文件包含以太网数据)并通过不同参数随机访问数据的最佳方法是什么?
- 将移出参数的最佳做法
- 生成包含给定类型的 N 个参数的可变参数列表的最佳方法?
- 使用作为参数返回的指针的最佳做法是什么
- 最佳做法是在方法中传递参数
- 将不同类型的多种参数发送到处理方法的最佳方法.C
- 将对象数组作为参数传递的最佳方法是什么
- 在函数中使用 const 引用参数访问函数中成员的最佳实践 C++.
- 第一个进程保持运行而后续进程仅传递参数的最佳 IPC 方法是什么?
- 最佳实践C :多种方法的重用默认参数
- 处理 2+ 模板参数的最佳方法
- 在C 中传递多个函数参数的最佳实践
- 将结构分为函数参数列表的最佳方法
- std::shared_ptr语言 - 将共享指针作为参数传递的最佳做法
- 将函数作为参数传递的最佳方式
- 派生类方法的默认参数的最佳实践
- 返回转发引用参数 - 最佳做法
- 具有多个特征对象作为参数的函数的最佳实践
- haarclassifiers的最佳参数