c++ - 使用强 typedef 作为 Boost Parameter 库的更轻量级替代方案?

标签 c++ boost boost-parameter

我经常使用 Boost strong typedef 实用程序来 boost 我的程序的安全性。例如通过编写如下代码:

BOOST_STRONG_TYPEDEF(int, X)
BOOST_STRONG_TYPEDEF(int, Y)
BOOST_STRONG_TYPEDEF(int, Width)
BOOST_STRONG_TYPEDEF(int, Height)

struct Rect {
    Rect(X x, Y y, Width w, Height h);
};

// Usage:
Rect rect(X(10), Y(20), Width(800), Height(600));

这里的强 typedef boost 了代码的可读性和安全性。 (如果参数以错误的顺序提供,编译器将报告错误,如果参数都是 int,则不会出现这种情况。)

我的问题是:

  • 可以为此目的使用 BOOST_STRONG_TYPEDEF 吗? (文档为 very brief。)
  • 是否有重要的理由更喜欢 boost 参数库?

最佳答案

从技术上讲:

  • 有效
  • 它增加了类型安全性

实际上:

我不建议仅仅为了单个函数的参数而创建新类型(除非它是特定于该函数的枚举),类型应该渗透到应用程序中以避免反复使用强制转换。

如果在整个应用程序中使用了 XYWidthHeight 类型,那么不仅不会有类型转换,但你的应用程序会更安全,记录也更好(是的......我是一个类型怪胎)。

现在,对于 Boost.Parameters,这是完全不同的。

Boost.Parameters 可以(可能)在您已经有类型时添加。老实说,虽然我从来没有看到需要。当你的函数变得如此笨拙以至于需要 Boost.Parameters 来调用它们时,你应该修复函数,而不是添加到困惑中。

关于c++ - 使用强 typedef 作为 Boost Parameter 库的更轻量级替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9211210/

相关文章:

C++ CLI GUI 事件处理

c++ - 如何使用 "const unordered_map"?

c++ - 指定 boost 信号的备用默认值2

c++ - 将 Boost 参数与 operator() 一起使用

c++ - 如何在 C++11 中初始化 pair<vector<pair<bool,int>>,vector<pair<bool,int>>>

c++ - 从 streambuf 派生而不重写相应的流

c++ - boost::aligned_storage 在返回时像 POD 类型一样复制非 POD 对象

c++ - 将 std::bind 与 boost::signals2 一起使用是否安全?

c++ - 使用boost序列化读取批量大小的二进制文件

C++ "Named Parameter Idiom"与 Boost::Parameter 库