2017-08-07 7 views

Antwort

0

using kann die Typdeklaration ersetzen, falls Sie sie als Alias ​​eines anderen Typs verwenden oder wenn Sie diesen Typ deklarieren können. Syntax:

Verwendung Identifikator attr (optional) = Typ-ID; (1)

template < Templat-Parameterliste>Verwendung Identifikator attr (optional) = type-ID; (2)

Typ-ID - abstraktes declarator oder jede andere gültige Typ-ID (die eine neue Art einführen kann, wie bei Typ-ID angegeben ist). Die Typ-ID kann nicht direkt oder indirekt auf den Bezeichner beziehen.

So kann dies nicht durch einzelne using ersetzt werden, müssen Sie zwei:

typedef struct MyS 
{ 
    MyS *p; 
} MyStruct, *PMyStruct; 
0

Eine Erklärung der folgenden Form

typedef typename something<T>::type alias; 

kann durch

using alias = typename something<T>::type; 

Das ersetzt werden typename ist immer noch notwendig, aber es sieht besser aus, und das zu haben = in der Mitte der Linie ist ästhetisch erfreulich, da wir einen Alias ​​definieren. Das Hauptverkaufsargument für den Gebrauch ist, dass es templatiert werden kann.

template <typename T> 
using alias = typename something<T>::type; 

Sie können das nicht mit typedef allein tun. Das C++ 98-Äquivalent wäre diese leicht monströse Syntax. bei der Definition der Funktion Aliase

template <typename T> 
struct Alias { 
    typedef typename something<T>::type type; 
}; 

// Then refer to it using typename Alias<T>::type. 
// Compare to the C++11 alias<T>, which is much simpler. 

Das andere Hauptverkaufsargument von using über typedef ist, dass es viel sauberer aussieht. Vergleichen

// C++98 syntax 
typedef int(*alias_name)(int, int); 
// C++11 syntax 
using alias_name = int(*)(int, int); 
+0

"using alias = typenname etwas :: type;" Würdest du bitte erklären, warum "typename" auf der rechten Seite von "=" noch benötigt wird? –

+0

@PeterHan 'typenname' war nie notwendig, es sei denn Code wäre mehrdeutig, die einzige andere Verwendung ist, dass er' class' in Templates ersetzen kann – Swift

Verwandte Themen