Я только что переписал следующий код C89, который возвращается из текущей функции:
// make sure the inode isn't open
{
size_t i;
for (i = 0; i < ARRAY_LEN(g_cpfs->htab); ++i)
{
struct Handle const *const handle = &g_cpfs->htab[i];
if (handle_valid(handle))
{
if (handle->ino == (*inode)->ino)
{
log_info("Inode "INO_FMT" is still open, delaying removal.",
(*inode)->ino);
return true;
}
}
}
}
С этим гибридом C ++ 0x STL / лямбда:
std::for_each(g_cpfs->htab.begin(), g_cpfs->htab.end(), [inode](Handle const &handle) {
if (handle.valid()) {
if (handle.ino == inode->ino) {
log_info("Inode "INO_FMT" is still open, delaying removal.", inode->ino);
return true;
}
}});
Который генерирует:
1> e: \ src \ cpfs4 \ libcpfs \ inode.cc (128): ошибка C3499: лямбда, для которой задан тип возврата void, не может возвращать значение
Я не учел, что возвращение в лямбде, на самом деле, не возвращается из вызывающей стороны (раньше никогда не видел функции с ограничениями в C / C ++). Как мне return true
из вызывающей стороны, где исходная функция сделала бы это?