使用typedef自定义内置类型

时间:2014-06-24 17:24:23

标签: c++ types typedef

我正在用c ++编写一个模糊逻辑头,并尝试执行以下操作。

typedef float fuzzy;
fuzzy operator !();

编译器可以这么说。

error: ‘fuzzy operator!()’ must have an argument of class or enumerated type

我知道我可以编写一个可以处理这个问题的类(可能比问这个问题要快得多),但这似乎有点过分,因为这样一个类实际上只有1个数据成员,只有构造函数和赋值成员职能。所有这些都是多余的,因为只有一个数据成员,它将被处理,好像它是一个浮点数。其他运营商可能会被实施为非会员功能。因此,除了它的自定义逻辑和按位运算符之外,该类本质上是一个浮点数。

是否可以使用typedef创建内置(一种伪类)的自定义版本?根据我的发现,typedef主要用于减少程序员在某些环境以不同方式定义/处理类型时更改类型的位置数。

也许我疯了,但这似乎是使用typedef最合乎逻辑且最理想的方式之一。有什么理由说这是一个坏主意,或者只是不可能?

1 个答案:

答案 0 :(得分:5)

typedefusing fuzzy = float;一样,不会引入新类型,而是引入别名。

因此,fuzzyfloat的类型相同,您不能为内置类型重载运算符。

因此,如果出于某种原因需要重载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;
}