Tag: typedef

令人困惑的typedef涉及类范围

我正在阅读C ++项目的代码,它包含以下forms的代码: namespace ns { class A {}; class B {}; } struct C { typedef ns::A* ns::B::* type; }; 有人可以解释typedef行的含义吗? type似乎是ns::B指向ns::A成员的某种指针,但我不确定。 真实代码中的A类和B类不是空的,但是我认为这里没有关系。 这里是一个生动的例子 。

我可以模仿一个C头重新定义C ++的布尔?

我正在编写一个程序,我真的更喜欢用C ++编写,但是,我需要包含一个重新定义bool的C头文件: # define false 0 # define true 1 typedef int bool; 显而易见的解决scheme是编辑标题说: #ifndef __cplusplus # define false 0 # define true 1 typedef int bool; #endif 但是,唉,因为图书馆是只读的,我不能。 有没有办法告诉gcc忽略这个typedef? 或者,我可以用C ++编写大部分函数,​​然后为这两个编写一个C封装器? 或者,我应该把它吸起来,写在C的东西?

如何typedef模板类?

我应该如何input一个template class ? 就像是: typedef std::vector myVector; // <— compiler error 我知道有两种方法: (1) #define myVector std::vector // not so good (2) template<typename T> struct myVector { typedef std::vector<T> type; }; // verbose 在C ++ 0x中我们有更好的吗?

这个typedef语句是什么意思?

在一个C ++参考页面,他们提供了一些typedef的例子,我试图理解他们的意思。 // simple typedef typedef unsigned long mylong; // more complicated typedef typedef int int_t, *intp_t, (&fp)(int, mylong), arr_t[10]; 所以简单的typedef(第一个声明)我明白了。 但是他们在第二个(下面重复)中声明了什么? typedef int int_t, *intp_t, (&fp)(int, ulong), arr_t[10]; 特别是(&fp)(int, mylong)是什么意思?

自引用结构体定义?

我没有长时间写C,所以我不知道如何去做这些recursion的事情……我希望每个单元格包含另一个单元格,但是我得到了一个错误“字段”子字段的行数不完整“。 这是怎么回事? typedef struct Cell { int isParent; Cell child; } Cell; PS(Ziggy也显然被typedef弄糊涂了:他​​已经敲入Cell to Cell并且奇怪为什么?)

如何使用C ++ 11 using语法typedef函数指针?

我想写这个 typedef void (*FunctionPtr)(); 使用using 。 我该怎么做?

为什么在C ++中声明枚举时使用typedef?

我已经多年没有编写任何C ++,现在我正试图回到它。 然后我跑过去,想着放弃: typedef enum TokenType { blah1 = 0x00000000, blah2 = 0X01000000, blah3 = 0X02000000 } TokenType; 这是什么? 为什么在这里使用typedef关键字? 为什么名称TokenType在这个声明中出现两次? 语义如何不同于这个: enum TokenType { blah1 = 0x00000000, blah2=0x01000000, blah3=0x02000000 };

C ++中的内部typedef – 风格好还是风格不好?

我发现自己最近经常做的事情是声明与该类中的特定类相关的typedef,即 class Lorem { typedef boost::shared_ptr<Lorem> ptr; typedef std::vector<Lorem::ptr> vector; // // … // }; 这些types然后在代码中的其他地方使用: Lorem::vector lorems; Lorem::ptr lorem( new Lorem() ); lorems.push_back( lorem ); 我喜欢它的理由: 它减less了由类模板引入的噪声, std::vector<Lorem>变成了Lorem::vector等 它作为一个意图声明 – 在上面的例子中,Lorem类旨在通过boost::shared_ptr引用计数并存储在一个向量中。 它允许实现改变 – 例如,如果需要改变Lorem,以便在后期对引用计数(通过boost::intrusive_ptr )进行入侵式引用计数,那么这将对代码产生最小的影响。 我认为它看起来更漂亮,可以说比较容易阅读。 我不喜欢的原因: 如果你想在另一个类中embedded一个Lorem::vector ,但是只需要(或者想)转发declare Lorem(而不是在头文件中引入依赖),那么你最终会必须使用显式types(例如boost::shared_ptr<Lorem>而不是Lorem::ptr ),这有点不一致。 这可能不是很常见,因此难以理解? 我试着用自己的编码风格来客观,所以最好能有一些其他的意见,所以我可以稍微剖析一下我的想法。

typedef固定长度数组

我必须定义一个24位数据types。我使用char[3]来表示types。 我可以typedef char[3]到type24 ? 我在代码示例中试了一下。 我把typedef char[3] type24; 在我的头文件中。 编译器没有抱怨。 但是当我在我的C文件中定义了一个函数void foo(type24 val) {}时,它确实抱怨了。 我想能够定义typestype24_to_int32(type24 val)而不是type24_to_int32(char value[3]) 。

在C#中的typedef等效

在C#中是否有一个typedef等价物,或者有些类似的行为? 我做了一些谷歌search,但我看起来似乎是负面的。 目前我有一个类似于以下的情况: class GenericClass<T> { public event EventHandler<EventData> MyEvent; public class EventData : EventArgs { /* snip */ } // … snip } 现在,火箭科学家并没有弄清楚,当试图为这个事件实现一个处理程序时,这很快就会导致大量的input(为可怕的双关语表示歉意)。 它最终会是这样的: GenericClass<int> gcInt = new GenericClass<int>; gcInt.MyEvent += new EventHandler<GenericClass<int>.EventData>(gcInt_MyEvent); // … private void gcInt_MyEvent(object sender, GenericClass<int>.EventData e) { throw new NotImplementedException(); } 除了我的情况,我已经在使用一个复杂的types,而不仅仅是一个int。 如果有可能简化这一点就好了… 编辑:即。 也许是敲入EventHandler而不需要重新定义它来获得类似的行为。