我一直在寻找这个,但没有运气。可能是我正在寻找错误的词语,或者这可能是一个不寻常的请求(或者根本就不可行)。
无论如何,我的问题是:我希望能够使用类的实例......嗯,这是一个非常简单的例子:
class attribute
{
float value;
float min;
float max;
}
attribute attr1;
attr1.value = 5.0f;
现在,基本上,我想使用attr1,好像我正在调用
attr1.value
所以,当我说,
std::cout << attr1 << std::endl;
它会打印5.0(或者只是5)。
谢谢!
答案 0 :(得分:6)
您需要实施
std::ostream& operator<<(std::ostream& os, attribute const& att)
{
os << att.value;
return os; // this is how you "chain" `<<`
}
允许att.value
到public
,friend
发货,或写一个功能。
另一种选择是将转换运算符构建为float
:
class attribute
{
public:
operator float() const
{
return value;
}
private:
/*the rest of your class here*/
但这可能会带来意想不到的含糊之处。
最后,如果您希望attribute
的行为类似于数字类型,那么您可以根据需要重载更多运算符。例如,要重载+=
,您可以编写
template<typename Y>
attribute& operator+=(const Y& p)
{
value += p;
return *this;
}