I am slightly confused about c++ template.
Considering the template below
template<class TYPE>
void function(TYPE data)
and
template<typename TYPE>
void function(TYPE data)
My confusion is exactly what is the difference between typename and class used as variable identify or type.
For designating (type) template parameters, the two are exactly identical, just like int
/ signed int
, or &&
/ and
: template <typename>
/ template <class>
.
A curious restriction applies to template template parameters up to C++14:
template <template <typename> class Tmpl> struct Foo;
// ^^^^^
Here only the keyword class
is allowed to designate the template template parameter.
After C++14, you will be able to consistently use either class
or typename
everywhere:
template <template <typename> typename Tmpl> struct Foo;
There IS a difference between the two.
class
defines a class, so if you want to define a templated class as a template parameter, you have to use that.
For example you can define a template that receives a templated class type:
template <class A>
class Blah
{
};
template <template <class , class> class T, class A, class B>
class Blah<T<A,B>>
{
};
int _tmain(int argc, _TCHAR* argv[])
{
Blah<std::vector<int>> a;
return 0;
}
You can't declare a templated class like that with typename
.
Also typename
is used as a keyword to access dependent template names .
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.