Home     |     .Net Programming    |     cSharp Home    |     Sql Server Home    |     Javascript / Client Side Development     |     Ajax Programming

Ruby on Rails Development     |     Perl Programming     |     C Programming Language     |     C++ Programming     |     IT Jobs

Python Programming Language     |     Laptop Suggestions?    |     TCL Scripting     |     Fortran Programming     |     Scheme Programming Language


 
 
Cervo Technologies
The Right Source to Outsource

MS Dynamics CRM 3.0

C++ Programming

typename vs class


Hello,

I've seen two forms of template declarations

template<typename T>
class A{...};

and

template<class T>
class B{...};

what's the difference between "typename" and "class"?  I think both
declare "T" as a type variable.

Thanks,
Jess

No difference at all ;)

Regards,

Zeppe

On Jun 6, 6:14 pm, Zeppe

there is a difference when u do a typedef class vs typdef typename
i dont recall the exact diff

Jess wrote:
> Hello,

> I've seen two forms of template declarations

> template<typename T>
> class A{...};

> and

> template<class T>
> class B{...};

> what's the difference between "typename" and "class"?

In this situation: "Class" is shorter and faster to type, while many
find "typename" to be more expressive about the usage and maybe more
newbie-friendly.

Originally, only "class" was a keyword in pre-standard C++, so "class"
was adopted to templates when they were introduced. At some time, the
language lawyers saw that "typename" was needed (for other reasons), and
when first introduced, it was also found suitable in this situation.

--
rbh

Jess wrote:

:: Hello,
::
:: I've seen two forms of template declarations
::
:: template<typename T>
:: class A{...};
::
:: and
::
:: template<class T>
:: class B{...};
::
:: what's the difference between "typename" and "class"?  I think both
:: declare "T" as a type variable.
::

Used this way, there is no difference.

In other places, typename and class have distinct uses.

Bo Persson

The keyword "typename" is needed to tell the compiler that the following
is a type, and not something else, and it is used when the compiler
cannot possibly know. Example:

template <class T> // or <typename T>
void f() {
  T::x(y);

}

At this point, the exact type of T is unknown, and there is no possible
way of saying what x is. Is x a static member of some class, or is it a
type? In this situation, the rules of C++ says that T::x is not a type,
so if it is, then you have to say so with typename:

template <class T> // or <typename T>
void f() {
  typename T::x(y); //T::x is a type

}

This also effects what y is. In the first example, y must be some global
 variable, but in the latter, y is declared as a T::x (in a really
horrible manner).

--
rbh

Add to del.icio.us | Digg this | Stumble it | Powered by Megasolutions Inc