我正在用 C++ 编写模糊逻辑 header ,并尝试执行以下操作。
typedef float fuzzy;
fuzzy operator !();
编译器对此有话要说。
error: ‘fuzzy operator!()’ must have an argument of class or enumerated type
我知道我可以编写一个类来处理这个问题(可能比提出这个问题要快得多),但这似乎有点矫枉过正,因为这样的类实际上只有 1 个数据成员,只有构造函数和赋值成员函数。所有这些都是多余的,因为只有 1 个数据成员,并且它会被当作 float 来处理。其他运算符可能会作为非成员函数来实现。因此,该类本质上是一个 float ,除了它的自定义逻辑和按位运算符。
是否可以使用 typedef 创建内置函数(一种伪类)的自定义版本?据我所知,typedef 主要用于减少程序员在某些环境以不同方式定义/处理其类型的情况下可能必须更改类型的位置数量。
也许我疯了,但这似乎是使用 typedef 的最合乎逻辑和最理想的方法之一。是否有某种原因表明这是一个坏主意,或者根本不可能?
最佳答案
typedef
与 using fuzzy = float;
一样,不是引入新类型,而是引入别名。
因此,fuzzy
与 float
类型相同,并且您不能重载内置类型的运算符。
因此,如果您出于某种原因需要重载模糊运算符,它必须是类或结构:
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;
}
关于c++ - 使用 typedef 自定义内置类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24392744/