结构体模板中成员的别名

问题描述 投票:0回答:1

我在与数学相关的代码中使用我的模板:

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));

想象一下如果公式有更多括号会怎样。

c++ stl
1个回答
0
投票

是的,可以使用匿名联合

template <typename T> 
struct range {
    union { T min, lower; };
    union { T max, upper; };
}; 

同一个数据成员可以有任意多个名称。

© www.soinside.com 2019 - 2024. All rights reserved.