Непосредственно - синтаксис DO_ALL_BLOCK_IP(iter) {/* code here */}
недействителен, если DO_ALL_BLOCK_IP
- это функция.
Вы можете использовать новый C++ диапазона синтаксиса, до тех пор, пока вы не должны использовать итератор непосредственно (только значение):
for(auto& value : m_block_ip)
{
// code here
}
Если вы должны использовать функцию для некоторых причина, вы могли бы передать его функтор и использовать лямбда-выражения, чтобы определить, что:
// definition (assuming m_block_ip is a vector of block_ip_t)
void DO_ALL_BLOCK_IP(std::function<void(std::vector<block_ip_t>::iterator)> f) {
for(auto iter = m_block_ip.begin(); iter != m_block_ip.end(); iter++)
f(iter);
}
// alternate definition that *may* be more efficient, but also more cumbersome
template<class F_CLASS> void DO_ALL_BLOCK_IP(F_CLASS f) {
for(auto iter = m_block_ip.begin(); iter != m_block_ip.end(); iter++)
f(iter);
}
// how to call
DO_ALL_BLOCK_IP([&](std::vector<block_ip_t>::iterator iter) {
// code here
});
Как это * не * C++? – user2357112
Я имею в виду, как функция. Я хочу удалить #define и переписать как функцию –
Ваши определения не являются полными операторами (тело цикла 'for' отсутствует), поэтому вы не сможете их заменить для функций без изменения каждого сайта вызова. –