Ich weiß, dass das "using" -Schlüsselwort als Vorlagenalias und Typalias verwendet werden kann, aber ich habe nicht gesehen, dass jemand "typedef typename" erwähnt hat könnte durch "Verwendung" ersetzt werden. Also könnte es?Kann "typedef typename" durch "using" Schlüsselwort in C++ ersetzt werden 11
Antwort
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;
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);
- 1. Ist "typename" in C++ 11 using-declaration erlaubt/erforderlich?
- 2. C++ 11 `using` Schlüsselwort: spezialisieren Vorlage Alias von Vorlage Parameter
- 3. 11 C++, vs typedef, templatized
- 4. Kann die using-Anweisung durch geschweifte Klammern ersetzt werden?
- 5. struct ohne typedef Schlüsselwort
- 6. Vorlage typedef C++ 0x
- 7. Mit dem Schlüsselwort typedef in c
- 8. Werden "typename" -Direktiven nicht von Compilern implementiert?
- 9. Schlüsselwort USING in Mysql
- 10. Können enums durch c in C ersetzt werden?
- 11. C# USING Schlüsselwort - wann und wann nicht?
- 12. Was ist der Unterschied zwischen 'typedef' und 'using' in C++ 11?
- 13. Convert C# 'using' Schlüsselwort zu F #
- 14. `using` als typedef verursacht CS1001
- 15. Schlüsselwort auto seltsame Verhalten in C++ 11
- 16. typedef Variable in C++
- 17. C++ 11: Funktionsvorlage: Parameter durch Referenz übergeben
- 18. Eine typedef/using-Definition aus einer Vorlagenklasse extrahieren
- 19. Eingabewert kann nicht durch Javascript ersetzt werden
- 20. Wie programmiere ich programmatisch das Schlüsselwort "using" in C#?
- 21. "using" (typedef) Zeiger: Sein Standardkonstruktor return nullptr?
- 22. (g ++ 4.7.1) Ersetzen von expliziten Typnamen durch eine äquivalente Klasse typedef kann nicht kompiliert werden
- 23. Entspricht dem Schlüsselwort "using" von C# in der Powershell?
- 24. Warum benötigt das Wort 'typedef' für abhängige Typen 'typename'?
- 25. kann synchronisiert auf Methodenebene durch Lock ersetzt werden?
- 26. Was genau macht das Schlüsselwort "using" in C++?
- 27. Wie man "children:" durch ein anderes Schlüsselwort ersetzt (zB "descdendants:")
- 28. Typedef in Traits vs Typedef in Klasse
- 29. Interpunktionszeichen in Spaltennamen werden durch ..X ersetzt
- 30. C++ typedef und Vorlagen Syntax?
"using alias = typenname etwas :: type;" Würdest du bitte erklären, warum "typename" auf der rechten Seite von "=" noch benötigt wird? –
@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