问题标签 [typedef]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
5249 浏览

c - typedef 的命名方案

我正在开发一个广泛使用结构的库,例如

使用 _t 后缀是个坏主意,因为它是 POSIX 保留的命名空间。结构的 _s 后缀也没什么用。所以我想我可以把它全部改成

或者如果不需要结构名称

但是,我无法再将 typedef 与常规符号(变量等)区分开来。这真的很重要吗?我应该为 typedef 使用不同的合适命名方案吗?还是没那么重要?

我真的不太确定。你怎么看?另外,您对 typedef 命名方案有什么建议?

0 投票
12 回答
128879 浏览

java - C++ 中的 typedef 关键字是否有 Java 等效项或方法?

来自 C 和 C++ 背景,我发现明智地使用typedef非常有帮助。您是否知道在 Java 中实现类似功能的方法,无论是 Java 机制、模式还是您使用过的其他有效方法?

0 投票
5 回答
1204 浏览

c++ - Why is the use of typedef in this template necessary?

When I compile this code in Visual Studio 2005:

I get these errors:

If I add a typedef to the CFooVector template, I can get the code to compile and work:

My question is, why does the typedef work when using the bare 'typename std::vector>::iterator' declaration did not work?

0 投票
4 回答
11317 浏览

c++ - C++ STL 映射 typedef 错误

我编写的一些代码遇到了一个非常讨厌的问题。我发现其他人在 stackoverflow 上遇到了同样的问题,我尝试了解决方案,但没有一个对我有用。

我对我正在使用的几种常见 STL 类型进行了 typedef,除了我尝试对地图进行 typedef 时,其他都没有任何问题。在测试程序中包含我的标头时,我收到“some_file.h:83: error: expected initializer before '<' token”错误。

这是标头(some_file.h)的重要部分:

some_file.cpp 中的包含有:

测试文件按顺序仅包含字符串、向量和我的文件。它有一个 main 方法,它只是做一个 hello world 之类的事情。

有趣的是,我很快将一个模板类放在一起以查看问题出在哪里(将“ std::map<Column...”替换为“ hello<Column...”)并且它没有问题地工作。

如果您使用的类没有 ' <' 运算符,我已经创建了映射所需的运算符重载。

0 投票
2 回答
463 浏览

c++ - 我如何转发声明一个已被 typedef 的类?

我有一个字符串类,不出所料,它使用不同的实现,具体取决于是否启用了 UNICODE。

这很好用,但我目前有一个问题,我需要转发声明 StringT typedef。我怎样才能做到这一点?

我不能这样做typedef StringT;,这使得前向声明变得棘手。是否可以对这种类型定义的类型进行前向声明,而不必将上面的代码传递到头文件的顶部?

0 投票
6 回答
1562 浏览

java - “伪typedef反模式”有什么理由吗?

我有一个相对复杂的泛型类型(比如Map<Long,Map<Integer,String>>),我在类内部使用它。(没有外部可见性;它只是一个实现细节。)我想将它隐藏在 typedef 中,但 Java 没有这样的工具。

昨天我重新发现了以下成语,并很失望地得知它被认为是一种反模式

当类型被隐藏并且不构成库 API 的一部分时(在我的阅读中这是 Goetz 对使用它的主要反对意见),这是否有任何理由?

0 投票
2 回答
13843 浏览

c++ - C++ 类前向声明​​的缺点?

我想在我的软件中使用类的前向声明,所以我可以有 typedef
并在类完整声明中使用它们。

像这样:

所以我的问题是:这种方法有什么缺点吗?我记得一些关于前向声明的析构函数问题的讨论,但我并没有把所有东西都拿出来。
或者有没有其他选择来实现这样的事情?

谢谢。

编辑:我找到了我所指的讨论:这里

0 投票
4 回答
3092 浏览

c++ - 模板的成员 typedef 用于 VS 中的参数未声明标识符但不是 GCC

我正在查看一些大量使用模板的代码。它在 GCC 上编译得很好,但在 VS(在 2003 - 2010 beta 1 上测试)上编译得很好,在语法分析期间它失败了。不幸的是,我对代码结构的了解还不够,无法减少问题并仅在几行内重现问题,所以我只能猜测原因。我希望这里有人能指出我正确的方向。

我们有

在 VS 上编译时,它返回的第一条错误消息(在许多错误消息中)是

: 错误 C2065: ' unbounded_int_type' : 未声明的标识符

我的意思是,指向typedef吧?:-S

编辑:

好像有什么关系

用作模板参数。在其余的代码中,成员函数参数中使用的类似 typedef 编译得很好。到目前为止,我能看到的唯一区别是其他情况都没有将上述行作为模板参数。make_signed来自 Boost.TypeTraits。

编辑:

好吧,也许不是这样,因为完全相同的事情是在另一个编译好的文件中完成的。唔...

赏金编辑:

好的,我认为在这一点上很明显,问题实际上并不在于编译器抱怨的地方。只有在该特定点的两个成员函数定义失败。事实证明,显式限定参数仍然无法编译。唯一直接的解决方案是定义内联函数。这通过了语法分析。但是,当尝试安装模板时,VS 现在失败了,因为std::allocator<void>没有size_type成员。原来 VS 有一个std::allocator<T>for T=void 的专业化,它没有声明 a size_type。我认为size_type是所有分配器的必需成员?

所以现在的问题是,在语法分析过程中,什么可能会严重破坏 VS,以至于它抱怨完全不相关的非问题是错误,你如何调试这样的代码?

ps 对于那些有太多空闲时间的人,我试图在 VS 中编写的代码是 Kevin SoppBoost 沙箱中的 mp_math,它基于libtommath

0 投票
1 回答
5886 浏览

doxygen - 命名空间中的 Doxygen 和 typedef

有人能告诉我这段代码有什么问题,所以 doxygen 无法处理吗?

我需要被许多方法用作参数类型的枚举器

1) 在帮助索引中可见。

2) 与此文档页面正确链接。

目标文档格式为 chm。

这绝对令人困惑,因为没有错误,没有警告,什么都没有。

有一次,在玩了不同的 doxygen 配置选项后,我设法实现了 #1 - 类型在索引中,但我不知道是什么开关做了那个,我无法重复它。

0 投票
3 回答
6198 浏览

c++ - C++:在 MSVC 中使用 __stdcall 回调 typedef

这种类型定义:

在 BorlandCpp 中编译得很好,但是,当我在 msvc 中编译它时,我必须删除WINAPI(这只是 的别名__stdcall):

为什么会这样?我可以安全地删除 WINAPI 部分吗?

更新:我必须从 typedef 中删除“WINAPI”,否则我得到了

为线。

你能告诉我为什么 Borland 可以用“WINAPI”编译它而 Msvc 不能吗?