维基百科关于Properties的文章介绍了一个可用于创建属性成员的模板类(轻微编辑):
template <typename T> class property {
T value;
public:
T & operator = (const T &i) {
return value = i;
}
operator T const & () const {
return value;
}
};
struct Bar {
// Using the property<>-template.
property <bool> alpha;
property <unsigned int> bravo;
};
int main () {
Bar bar;
bar.alpha = true;
return bar.bravo;
}
我想弄清楚的是C ++功能的名称,它允许bar.bravo
存在而没有尾随()
。
代码compiles很好......我只是不明白为什么!
谷歌搜索指向“Functors&#39;”,但那些重载的parens运算符似乎都有参数(我可以理解它们是如何工作的)。
答案 0 :(得分:2)
答案 1 :(得分:1)
班级property<T>
定义了“隐式转换为T const &
”运算符:
operator T const & () const { return value; }
因此,您可以将property<T>
类型的值转换为类型T
的值(更具体地说,转换为T
类型的常量左值)。