Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem C++ functor vs funkcia

Som začiatočník v C++ takže som hľadal spôsob ako previesť reťazec na veľké písmená. Trochu ma zarazil fakt, že STL (konkrétne std::string resp. std::wstring) neobsahuje takúto základnú funkciu. Vygooglil som si henten functor convert1 (trošku som ho upravil pre svoje potreby). Ale zaujíma ma prečo autor zabalil preťažený operátor do štruktúry a urobil functor a nepoužil funkciu, keď obidve funguje rovnako (aspoň na prvý pohľad)? Viem si predstaviť prípady keď functor má zmysel, ale v tomto prípade ten zmysel nevidím. Je functor v niečom lepší? A ako je to s efektivitou sú obidve riešenia rovnako efektívne?

Na konci je ešte tretie riešenie, ktoré nepoužíva referenciu, ale návratovú hodnotu aké sú výhody / nevýhody jednotlivých riešení čo z toho je najefektívnejšie? A prečo sa vlastne v C++ preferujú referencie pred návratovými hodnotami?

#include <iostream>
#include <algorithm>
#include <string>

using namespace std;

// toto som si vygooglil
struct convert1 {
	void operator()(wchar_t& c) { c = towupper((std::wint_t)c); }
};

// toto je moja funkcia ktorá funguje rovnako ako functor convert1 
void convert2(wchar_t& c) { c = towupper((std::wint_t)c); }

void main()
{
	wstring name1(L"Alex");
	wstring name2(L"Barbora");

	for_each(name1.begin(), name1.end(), convert1());
	std::wcout << name1 << endl;
	for_each(name2.begin(), name2.end(), convert2);
	std::wcout << name2 << endl;

	wstring name3(L"Andy");

	// tretie riešenie
	std::transform(name3.begin(), name3.end(), name3.begin(), towupper);
	std::wcout << name3 << endl;
	system("pause");
}

A ešte otázka na záver: načo autor príkladu explicitne pretypoval wchar_t na win_t? Keď sa to pretypuje aj imlicitne?

Předmět Autor Datum
Nenašly se žádné odpovědi.

Zpět do poradny Odpovědět na původní otázku Nahoru