Re[3]: auto in argument list
От: Аноним  
Дата: 13.07.09 11:40
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, Peter K., Вы писали:


PK>>А так в Intel C++ можно?

...
CC>Можно так:

CC>
CC>#define foreach(it,cont)    for (auto it = (cont).begin(), foreach_end_##it = (cont).end();it != foreach_end_##it;++it)

CC>foreach(it, container)    {std::cout << *it << " ";}
CC>


А можно и так:
#define foreach BOOST_FOREACH

Re[4]: auto in argument list
От: CreatorCray  
Дата: 13.07.09 12:00
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>А можно и так:

А>
А>#define foreach BOOST_FOREACH
А>

А>
Не, так нельзя
Придется буст подрубать
а это сильно больше одной строки -> минус скорости компиляции.
тем более бустовый форыч сильно громоздкий.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[10]: auto in argument list
От: D14  
Дата: 13.07.09 18:38
Оценка:
Здравствуйте, alexeiz, Вы писали:


A>У меня всё работает в VC++ 2010. function<> не из boost'а а из <functional> (C++0x).


С typedef std::tr1::function<int(int)> inttoint; в MSVC++ 2008 + SP тот же access violation в каком-то деструкторе на строке
auto cid(compose(id(),id()));.
Re: auto in argument list
От: D14  
Дата: 14.07.09 09:49
Оценка:
Господа, а это даже весело.

Вот такой код выполняется без ошибок. (Intel C++ + MSVC2008)
#include <functional>
#include <iostream>
#include <string>

typedef std::tr1::function<int(int)> inttoint;

inttoint id(){return [](int x) { return x; };}

int main()
{
    auto compose=[](const inttoint& f, const inttoint& g)
    {
        return [&](int x) { return f(g(x)); };
    };
    std::cout << compose(id(),id())(1234) << std::endl;
    return 0;
}

Но стоит поменять одну строчку на
return [=](int x) { return f(g(x)); };

Access violation.

Пойду матчасть покурю.
Re[5]: auto in argument list
От: jazzer Россия Skype: enerjazzer
Дата: 14.07.09 10:05
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, <Аноним>, Вы писали:


А>>А можно и так:

А>>
А>>#define foreach BOOST_FOREACH
А>>

А>>
CC>Не, так нельзя
CC>Придется буст подрубать
CC>а это сильно больше одной строки -> минус скорости компиляции.
CC>тем более бустовый форыч сильно громоздкий.

Зато бустовый форыч работает на С++03.
И, естественно, он будет переписан на auto для компиляторов, в которых оно уже есть.
Так что код c буст.форычем будет работать на любом компиляторе, и юзать по максимуму то, что есть.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[6]: auto in argument list
От: CreatorCray  
Дата: 14.07.09 11:48
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Зато бустовый форыч работает на С++03.

для С++03 немного геморройнее

#define foreach(decl,it,cont) if (false) {} else for (decl::iterator it = (cont).begin(), c_foreach_end_##it = (cont).end();it != c_foreach_end_##it;++it)
#define c_foreach(decl,it,cont) if (false) {} else for (decl::const_iterator it = (cont).begin(), c_foreach_end_##it = (cont).end();it != c_foreach_end_##it;++it)
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.