我在与数学相关的代码中使用我的模板:
template <typename T>
struct range {
T min, max;
};
现在我意识到我需要相同的迭代器,但为了使代码更具可读性,我需要字段的其他名称。我可以这样做:
template <typename T>
struct iterators_range {
T lower, upper;
};
但我想保留模板的相同短名称。替代命名空间也是如此。
第一个想法是以某种方式为这些名称起别名。在现代 C++ 中可能吗?
当然,简单的解决方案
template <typename T>
struct range {
T min, max;
T& lower = min;
T& upper = max;
};
不起作用,因为它创建了两个引用(指针)并消耗内存。
我想让事情保持简单,因此不想使用访问器方法(访问器成员函数)(不希望客户端代码中出现过多的括号。
有没有更好的方法可以重用相同的结构?
更新
自从人们问我为什么不喜欢使用访问器方法(访问器成员函数)以来的更新。
我不喜欢丑陋的代码,比如:
range r;
r.setLower(value);
也没有令人困惑的代码,例如:
range r;
r.lower()=value;
关键是在有自己的括号的公式中的用法,例如:
range r;
float result = 1.0f/(1.0f - input/(r.min()-r.max()));
比
差很多range r;
float result = 1.0f/(1.0f - input/(r.min-r.max));
想象一下如果公式有更多括号会怎样。
是的,可以使用匿名联合:
template <typename T>
struct range {
union { T min, lower; };
union { T max, upper; };
};
同一个数据成员可以有任意多个名称。