1. C++ / Говнокод #11657

    +31

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    #include <iostream>
    #include <tr1/functional>
    
    using namespace std::tr1::placeholders;
    
    struct I
    {
      int i;
    };
    
    struct S
    {
      int i;
      I ii;
    };
    
    int main()
    {
      std::tr1::function<I& (S&)> pi = std::tr1::bind(&S::ii, _1);
      std::tr1::function<std::tr1::reference_wrapper<I> (S&)> pri = std::tr1::bind(static_cast<std::tr1::reference_wrapper<I> (*)(I&)>(&std::tr1::ref<I>), std::tr1::bind(pi, _1));
      std::tr1::function<int& (S&)> psi = std::tr1::bind(&I::i, std::tr1::bind(&std::tr1::reference_wrapper<I>::get, std::tr1::bind(pri, _1)));
      S s = {1, {2}};
      std::cout << psi(s) << std::endl;
      psi(s) = 3;
      std::cout << psi(s) << std::endl;
      return 0;
    }

    Нашёл на RSDN, в теме о том, как получить указатель на член члена.

    Запостил: suc-daniil, 28 Августа 2012

    Комментарии (8) RSS

    • Это компилируется? Как? Я минуснул, но зря. Поставьте за меня плюс.
      Ответить
    • Какой-то using не такой. Надо было б уж `using namespace std::tr1;` хотя бы. Помимо std;
      Ответить
      • Да, вот так: http://liveworkspace.org/code/e56f994b35df42c25eff349fd308cdcd симпатичнее
        Ответить
    • И где же тут именно указатель на член члена?
      Ответить
      • бинд разве должен работать с указателями на члены? Я думал он только для ссылок, указателей и by_value функций, функций-членов, функторов и лямбд.
        Ответить
      • В комментарии к коду написано "код найден в теме о том, как получить указатель на член члена", а не "в данном коде демонстрируется способ получения указателя на член члена".
        Ответить

    Добавить комментарий