我正在用c ++编写一个模糊逻辑头,并尝试执行以下操作。
typedef float fuzzy;
fuzzy operator !();
编译器可以这么说。
error: ‘fuzzy operator!()’ must have an argument of class or enumerated type
我知道我可以编写一个可以处理这个问题的类(可能比问这个问题要快得多),但这似乎有点过分,因为这样一个类实际上只有1个数据成员,只有构造函数和赋值成员职能。所有这些都是多余的,因为只有一个数据成员,它将被处理,好像它是一个浮点数。其他运营商可能会被实施为非会员功能。因此,除了它的自定义逻辑和按位运算符之外,该类本质上是一个浮点数。
是否可以使用typedef创建内置(一种伪类)的自定义版本?根据我的发现,typedef主要用于减少程序员在某些环境以不同方式定义/处理类型时更改类型的位置数。
也许我疯了,但这似乎是使用typedef最合乎逻辑且最理想的方式之一。有什么理由说这是一个坏主意,或者只是不可能?
答案 0 :(得分:5)
typedef
与using fuzzy = float;
一样,不会引入新类型,而是引入别名。
因此,fuzzy
与float
的类型相同,您不能为内置类型重载运算符。
因此,如果出于某种原因需要重载fuzzy
的运算符,它必须是类或结构:
struct fuzzy {
float data_;
// Put constructors here
// Put conversion to float here if desired
};
然后您可以定义自己的运算符,如:
std::ostream& operator << (std::ostream& os, const fuzzy& f) {
os << "Hello from fuzzy!\n" << f.data_;
return os;
}