Initialisering (Initializer lists)

Hur många gånger har man inte velat initialisera en vektor eller lista på samma sätt som man kan initialisera en C-array. I stället har man fått använda en serie av push_backs antingen uppradade eller i en loop över motsvarande C-array. C++2011 fixar det här nu genom att introducera templaten std::initializer_list.

Det funkar så här. Konstruktorer och andra funktioner kan ha en parameter av typen std::intitializer_list:

void function(initializer_list<string> list)
{
   cout << "Number of args are " << list.size() << endl;
   for (auto it = list.begin(); it != list.end(); ++it)
   {
      cout << "List contains: " << (*it) << endl;
   }
}

Anropet kan se ut så här:

   function({"hi", "ho", "foo", "bar"});

Det fina är att standardbibliotekets klasser implementerar det här också. Så nu kan vi göra på något av de här sätten för att initialisera en vektor med strängar:

   vector<string> v1 = {"hi", "ho", "foo", "bar"};
   vector<string> v2 {"hi", "ho", "foo", "bar"};

Vi ser här ännu ett exempel på en nyhet som gör C++  lite enklare att använda och dessutom gör att koden blir tydligare och enklare att förstå.

Publicerad i C/C++

Kategorier

WP to LinkedIn Auto Publish Powered By : XYZScripts.com