Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C++ typedef class use

Tags:

c++

class

typedef

Why use a typedef class {} Name ?

I learnt this in IBM C++ doc, no hint to use here.

like image 810
kiriloff Avatar asked Mar 19 '13 14:03

kiriloff


2 Answers

This is a hangover from the 'C' language.

In C, if you have

struct Pt { int x; int y; };

then to declare a variable of this struct, you need to do

struct Pt p;

The typedef helped you avoid this in C

typedef struct { int x; int y; } Pt;

Now you can do

Pt p;

in C.

In C++, this was never necessary because

class Pt { int x; int y; };

allowed you to do

Pt p;

It provides no notational benefits in C++ as it does in C. OTOH, it leads to restrictions because this syntax does not provide any mechanism for construction, or destruction.

i.e. you cannot use the name typedef name in the constructor or destructor.

typedef class { int x; int y; } Pt;

You cannot have a constructor called Pt, nor a destructor. So in essence, most of the time, you shouldn't do this in C++.

like image 164
user93353 Avatar answered Sep 22 '22 18:09

user93353


This answer assumes that there's some interesting content in the class, not just {}.

In C++, you can have a function with the same name as a class (for compatibility with C), but you pretty much never want to.

You can't have a function with the same name as a typedef, so doing this protects you against ill-disciplined name choices. Pretty much nobody bothers, and even if you're going to bother you'd probably write it:

class Name {};
typedef Name Name; // reserve the name

If the code you're referring to really is as written (I can't see it by following your link), then it's rather like class Name {}; (which is a peculiar thing to write, why would you call an empty class Name?), but modified for the above consideration.

like image 32
Steve Jessop Avatar answered Sep 23 '22 18:09

Steve Jessop