2016-05-20 7 views
4

Ich frage mich, ob es in C++ ein Makro oder Sprachelement gibt, das denselben Typ wie der Rückgabewert in einer Funktion darstellt.C++ - Sprachfunktion zur Vereinfachung von Benennungstypen (besonders in Funktionsdeklarationen)

Zum Beispiel:

std::vector<int> Myclass::CountToThree() const 
{ 
    std::vector<int> col; 
    col.push_back(1); 
    col.push_back(2); 
    col.push_back(3); 
    return col; 
} 

Statt Linie std::vector<int> col; gibt es irgendeine Art von Sprachelement? Ich weiß, es ist ziemlich trivial, aber ich bin nur gelangweilt mit dem Tippen ;-).

+1

können Sie 'typedef' oder' using' verwenden, wenn Sie einfach zu gelangweilt lange Typnamen eingeben, wie 'mit vi = std :: vector ', und geben Sie 'vi col;' danach. – delta

+2

Sie haben mehrere Optionen, um zu vermeiden, dass die tatsächlichen Typen der Variablen wiederholt werden. Mein Rat ist, dass Sie keine von ihnen verwenden :-) –

Antwort

6

Sie können zwei Dinge tun:

  1. Type aliasing, entweder using oder typedef.

    Diese beiden Deklarationen sind äquivalent und stellen einen anderen Namen bereit, den der Compiler als Synonym für den ursprünglichen Namen behandelt. Es kann auch für Vorlagen verwendet werden.

    Warum zwei Notationen, nicht nur eine? Das Schlüsselwort using wurde in C++ 11 to simplify notation for typedefs in templates bereitgestellt.

  2. In C++ 14, könnten Sie das auto Schlüsselwort für die automatischen Rückgabetyp Abzug verwenden:

    auto Myclass::CountToThree() const 
    { 
        std::vector<int> col; 
        col.push_back(1); 
        col.push_back(2); 
        col.push_back(3); 
        return col; 
    } 
    

    Für eine breitere Erklärung siehe this related question.

2

Für Ihr Beispiel könnten Sie nur

std::vector<int> Myclass::CountToThree() const 
{ 
    return {1,2,3}; 
} 

In der Regel schreiben Sie den Rückgabetyp einer Funktion mit decltype bekommen können, aber dies wahrscheinlich in Ihrer Situation nicht helfen:

std::vector<int> Myclass::CountToThree() const 
{ 
    decltype(CountToThree()) col; 
    col.push_back(1); 
    col.push_back(2); 
    col.push_back(3); 
    return col; 
} 
Verwandte Themen