Tôi vừa mới viết lại mã C89 sau, trả về từ hàm hiện tại:Return từ một lambda gọi C++ 0x trực tiếp
// 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;
}
}
}
}
Với C++ 0x STL/lambda lai:
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;
}
}});
nào tạo:
1> e: \ src \ cpfs4 \ libcpfs \ inode.cc (128): lỗi C3499: a lambda đã được xác định để có một kiểu void trở lại không thể trở về av alue
Tôi đã không nghĩ rằng sự trở lại trong lambda, không thực sự trở về từ người gọi (chưa bao giờ thấy chức năng phạm vi trong C/C++ trước đây). Làm cách nào để tôi return true
từ người gọi có chức năng gốc đã làm như vậy?
Note "phạm vi có trụ sở tại vòng" (tùy theo từng 0x dự thảo gọi chúng) là "vòng lặp foreach", đó là những gì bạn đang cố gắng để có được từ std :: for_each. –
Cú pháp foreach chính xác là những gì tôi đang tìm kiếm. –
vâng, tôi đã xóa lại nhận xét đó. Tôi cho rằng anh ta có nghĩa là cú pháp 'for_each'. :) – jalf