2017-09-08 11 views
-1

nur wundernd, ob es möglich war, eine Funktion zu haben (wie scan() oder was auch immer) in C++ das gleiche tun wie die std::cin Syntax?Gibt es eine Möglichkeit, 'Std :: Cin' in C++ in eine 'scan()' Funktion zu machen?

std::cin >> data; // or 
scan(data); 
+0

Eine vollständige Erklärung dessen, was Sie erwarten, wird geschätzt – StoryTeller

+0

Ich habe gerade von JavaScript weitergerollt und lerne PHP. Also dachte ich, es wäre schön, eine Funktion für I/O ('cout' und' cin') in C++ zu haben. – Oluwafunmito

+0

Das ist schön. Aber es erklärt nicht, was Sie erwarten. Gehen Sie nicht davon aus, dass jeder, der C++ kennt, auch Javascript oder PHP kennt. – StoryTeller

Antwort

6

In C++ 17, können Sie eine variadic template verwenden und eine fold expression eine Funktion zu erzeugen, die eine beliebige Anzahl von Argumenten nimmt und erzeugt eine Kette cin >> a >> b >> c >> ... für Sie:

template <typename... Ts> 
std::istream& scan(Ts&... xs) 
{ 
    return (std::cin >> ... >> xs); 
} 

Usage:

int i; 
double j; 
scan(i); 
scan(i, j); 

if (scan(i, j)) 
    std::cout << "Read " << i << ", " << j << "\n"; 
else 
    std::cout << "Invalid input\n"; 

live example on wandbox

+0

Sorry, eine Erklärung wäre nett, da ich noch ein Anfänger in C++ bin. Danke – Oluwafunmito

+1

Einige Informationen hinzugefügt, nach Artikeln auf variadischen Vorlagen suchen und Ausdrücke für Lernressourcen falten –

+0

@VittorioRomeo: ist es möglich, dies ohne Falteausdrücke zu tun (Falteausdrücke sind nicht allgemein noch verfügbar.)? – geza

1

Wenn Sie wollen einfach nur eine Funktion machen, die einen Wert zu einem Paramater zugewiesen Sie Ihre Eingabe Pass basiert Sie so etwas wie dieses

void scan(std::string & input) 
{ 
    std::string newInput; 

    cin << newInput; 

    input = newInput; 

} 


std::string myString; 

scan(myString); 

Sie eine Zeichenfolge eingeben aufgefordert werden, tun könnte und dann wird Ihr Eingang zugeordnet werden zu myString.

Verwandte Themen