Mi sono sempre chiesto perché non è possibile utilizzare classi definite localmente come predicati per gli algoritmi STL.Utilizzo di classi locali con algoritmi STL
Nella domanda: Approaching STL algorithms, lambda, local classes and other approaches, BubbaT menziona dice che 'Poiché lo standard C++ vieta tipi locali da utilizzare come argomenti'
codice Esempio:
int main() {
int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
std::vector<int> v(array, array+10);
struct even : public std::unary_function<int,bool>
{
bool operator()(int x) { return !(x % 2); }
};
std::remove_if(v.begin(), v.end(), even()); // error
}
Qualcuno sa dove nel lo standard è la restrizione? Qual è la logica per non consentire i tipi locali?
EDIT: Dal momento che C++ 11, è legale per utilizzare un tipo di locale come argomento di template.
Lo so, ma mi piacerebbe sapere dove vedere se riesco a capire perché. Hai un riferimento nello standard? –
Ti riferisci a 14.3.1.2, "argomenti del tipo di modello"? – greyfade
Ho aggiunto alcune informazioni e un link che potrebbe aiutare. Per riassumere, la restrizione era un errore che sarebbe stato risolto rapidamente se lo standard si stava evolvendo più velocemente ... – Klaim