![]() |
1
7
您可以(AB)使用隐式转换:
这与int使用相同的空间,可以执行以下操作:
但我同意你可能不需要这个。 |
![]() |
2
17
您需要使用这样的完整类型名:
|
![]() |
3
11
总结 下面是简短的回答:
因此,typedef的概念不适合C语言。 长回答 在C++中,它更有意义:C++作为一个预编译程序启动,将C代码吐出,然后编译。这种“代码生成器”在现代C++特性中仍然起作用(即,模板本质上是一种在编译时生成类和函数的图灵完整语言)。在这种情况下,typedef是有意义的,因为它是获取编译时类型工厂的“结果”或“返回”类型的“算法”的一种方法。 在这种奇怪的元语言中(在Boost之外很少有人掌握),typedef实际上是一个变量。 您所描述的并不那么复杂,但您仍然试图将typedef用作变量。在本例中,它被用作输入变量。所以当其他代码使用typedef时,它实际上并没有直接使用该类型。相反,它充当编译时代码生成器,基于typedef的输入变量构建类和方法。即使忽略C++模板,只看C类型DEFS,效果也是一样的。 C++与生成程序设计 C++被设计成一种多悖论语言(OO和过程,但直到Boost推出才起作用)。有趣的是,模板已经进化出了一个意想不到的悖论:生成式编程。(生成编程是在C++之前进行的,但是C++使它很流行)。生成程序实际上是元程序,在编译时生成所需的类和方法,这些类和方法又被编译成可执行文件。 C和生成式编程 我们的工具正朝着同一个方向缓慢发展。当然,reflection emit可以用于“手动”生成编程,但这是非常痛苦的。LINQ提供者使用表达式树的方式在本质上具有很强的生成性。T4模板非常接近,但仍然不足。“编译器即服务”(compiler as a service)有望成为C_vNext的一部分,如果它可以与某种类型变量(如typedef)组合,那么它似乎是最有前途的。 这个拼图的一部分是 still missing 生成程序需要某种类型的自动触发机制(C++),这是由 隐式模板实例化 ) 然而,它是明确的 不 C语言的目标是在C语言中有任何类型的“代码生成器”,比如C++模板(可能是为了理解,很少有C++程序员理解C++模板)。这很可能是一个由t4而不是c_满足的利基。 结论(重复总结) 以上都是这样说的:
因此,typedef的概念不适合C语言。 |
![]() |
4
3
有时我也觉得我需要(整型)typedef用于与op类似的目的。 如果你不介意这些演员的直白(我实际上希望他们是这样),你可以这样做:
也适用于
不完全符合
|
![]() |
5
1
仅仅为了改变名字而重新定义基本类型是C++思维,而不是更纯的面向对象C++。每当你有把一个概念从一种语言推到另一种语言的冲动时,你必须停下来思考它是否有意义,并努力保持平台的本土化。 通过定义自己的值类型,可以满足轻松更改基础类型的要求。再加上隐式转换运算符和算术运算符,您可以定义非常强大的类型。如果您担心在简单类型的基础上添加层的性能,则不会有0.99%的可能性,1%的可能性是,如果有,则不会是性能优化的“低挂果”。 |
|
Robert King · Unity C#语法问题-转换位置 1 年前 |
![]() |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
|
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
![]() |
i_sniff_ket · 在unity之外使用unity类 2 年前 |