V knize o metaprogramování v C++ píšou, že něco jako "template<typename T> class C" je "funktor", ovšem bez nějakého bližšího kontextu. Může mi někdo polopatisticky vysvětlit, co to je funktor a jak to je relevantní pro C++?
https://en.wikipedia.org/wiki/Function_object
Chyba, to je něco úplně jiného. Je propastný rozdíl mezi volatelným objektem (std::function) a funktorem v kategorii typů nějakého jazyka (zdejší případ v kontextu generického programování).
std::function není "volatelný objekt" (v nejpřesnějším slova smyslu), nýbrž wrapper. Může uchovávat member funkci - čili metodu, standardní funkci, lambda funkci a nebo funktor (v kontextu funkčního objektu, čili přetíženého operátoru ()).
Ještě bych zmínil, že dle definice Scotta Meyerse je C++ složeno z několika jazyků, podporující různá paradigmata:
1) Generické programování (templaty)
2) Metaprogramování (turing-complete templaty a programování s nimi "v době překladu")
3) Funkcionální programování (lambdy)
4) OOP (klasické C++, jak si ho většina lidí představí)
5) Procedurální ("C-čková" část C++)
Čili při diskuzi o různých pojmejch je nutné dodat i kontext. A to je to, co se tu, myslím, plete dohromady... Možná by dávalo větší smysl se o tomhle bavit v kontextu Haskellu a jeho bláznivého type-systému.