Ich habe mich immer gefragt, warum Sie lokal definierte Klassen nicht als Prädikat für STL-Algorithmen verwenden können.Verwendung lokaler Klassen mit STL-Algorithmen
In der Frage: Approaching STL algorithms, lambda, local classes and other approaches, sagt BubbaT erwähnt, dass 'Da der C++ Standard lokale Typen verbietet als Argument verwendet werden sollte'
Beispielcode:
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
}
jemand, wo in der Weiß Standard ist die Beschränkung? Was ist der Grund dafür, lokale Typen zu verbieten?
EDIT: Da C++ 11, es legal ist, einen lokalen Typen als Template-Argument zu verwenden.
Ich weiß, aber ich würde gerne wissen, wo zu sehen ist, wenn ich verstehen kann, warum. Hast du einen Bezug zum Standard? –
Beziehen Sie sich auf 14.3.1.2, "Vorlagenargumente"? – greyfade
Ich habe einige Informationen und einen Link hinzugefügt, die helfen könnten. Zusammenfassend war die Beschränkung ein Fehler, der schnell behoben worden wäre, wenn der Standard schneller wurde weiterentwickelt ... – Klaim