This is not a question about the difference between using
and typedef
for creating type aliases. I would like to provide access to an existing type from a namespace inside a code block or a function.
I found two different ways :
I can "include" the type with a using declaration :
using typename mynamespace::mytype;
Or I can create a type alias :
typedef mynamespace::mytype mytype;
using mytype = mynamespace::mytype; //C++11
Thank you.
Related question : Using-declaration of an existing type from base class vs creating a type alias inside child class
You can also create an alias for a namespace or a type with a using alias directive.
using directives Use a using directive in an implementation file (i.e. *. cpp) if you are using several different identifiers in a namespace; if you are just using one or two identifiers, then consider a using declaration to only bring those identifiers into scope and not all the identifiers in the namespace.
namespace alias definition Namespace aliases allow the programmer to define an alternate name for a namespace. They are commonly used as a convenient shortcut for long or deeply-nested namespaces.
You can use an alias declaration to declare a name to use as a synonym for a previously declared type. (This mechanism is also referred to informally as a type alias). You can also use this mechanism to create an alias template, which can be useful for custom allocators.
Is there any difference ?
A type alias for a name in a namespace can appear in a class
struct S { using mytype = mynamespace::mytype; };
while a using-declaration may not.
What are the pros and cons of each syntax ?
The previous point is a pretty big con if you are dealing with class scope.
Other than that the two approaches are pretty much similar. An alias is a new name that stands exactly for the type that is aliased. While a using declaration brings the existing name of the type into scope. If you use mytype
for both, you won't notice a difference.
Which one is the most used/recommended ?
I doubt there's consensus on this. Use the one you have to when you have to (class scope), but stick to your team's style guide otherwise.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With