c++ - 使用 typedef 自定义内置类型

标签 c++ types typedef

我正在用 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 的最合乎逻辑和最理想的方法之一。是否有某种原因表明这是一个坏主意,或者根本不可能?

最佳答案

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

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

因此,如果您出于某种原因需要重载模糊运算符,它必须是类或结构:

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/

相关文章:

javascript - 如何在javascript中声明特定类型的数组

javascript - 使用@typedef 定义特定的函数类型

C++:重载operator+=和operator-=时是否需要自赋值检查?

c++ - 使用cmake编译CSDP

c++ - 如何在 Bazel 工作区中构建仅 header C++ 库?

c++ - 调试 QT TimerEvent 时 GDB 崩溃

file - 强制 dlmread 返回 uint8 矩阵 - 可能吗?

haskell - 在 Haskell 中使用 `print' 没有产生 (Show a0) 的实例

c++ - 模板类的类型定义?

c++ - 带有 std::vector 的模板 typedef 具有自定义分配器