Вкратце и очень иллюстративно так:
Почему не получается использовать такой код:
int main(int argc, char **argv)
{
list< string > strings;
strings.push_back("hello"); strings.push_back("world"); strings.push_back("from"); strings.push_back("zealot");
struct wordPrinter { void operator ()(const string& word) { cout << word.c_str() << "\t"; } }; for_each(strings.begin(), strings.end(), wordPrinter());
return 0;
}
а вот если описание структуры — предиката вынести из функции — запросто
struct wordPrinter { void operator ()(const string& word) { cout << word.c_str() << "\t"; } };
int main(int argc, char **argv)
{
list< string > strings;
strings.push_back("hello"); strings.push_back("world"); strings.push_back("from"); strings.push_back("zealot");
for_each(strings.begin(), strings.end(), wordPrinter());
return 0;
}
и просто структуры или объединения с битовыми полями прямо в функции объявляю — всё в порядке
я в недоумении