通常我会发现自己使用std :: pair来定义两个相关量的逻辑分组作为函数参数/返回值.一些例子:row/col,tag/value等.
通常我应该滚动自己的类而不是仅使用std :: pair.当事情开始崩溃时很容易看到 - 当代码变得乱七八糟时,第一,第二,它很难记住什么是什么 - std::pair<int, int>传达的意义不如一种类型Position.
您发现什么是将std :: pair的功能包装在一个传达真正含义的类型中的最佳方法?
以下是我考虑过的一些事情:
typedef std::pair<int, int> Position;
Run Code Online (Sandbox Code Playgroud)
这至少在传递类型时为类型赋予了有意义的名称,但是类型没有强制执行,它仍然只是一对,并且大多数相同的问题仍然存在.然而,编写起来非常简单.
struct Position : public std::pair<int, int>
{
typedef std::pair<int, int> Base;
Position() : Base() {}
Position(const Position &x) : Base(x) {}
Position(int a, int b) : Base(a, b) {}
int &row() { return first; }
const int &row() const { return first; }
int &col() { return second; }
const int &col() const { return second; } …Run Code Online (Sandbox Code Playgroud)