ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • boost python + lambda
    프로그래밍/c++ 2015. 11. 20. 11:01
    반응형

    Boost python + lambda


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    // 실패
      script_dict["lobby_class"=
        py::class_<lobby, boost::noncopyable>("lobby_class", py::no_init)
        .def("name", &lobby::name)
        .def("async_accept", [&lobby_](const std::string addr, unsigned short port){ … })
        ;
     
    // 실패
    auto async_accept = [&lobby_](const std::string& addr, unsigned short port){ .. }
     
      script_dict["lobby_class"=
        py::class_<lobby, boost::noncopyable>("lobby_class", py::no_init)
        .def("name", &lobby::name)
        .def("async_accept", async_accept)
        ;
     
    // 실패
      std::function<void(lobby& self, const std::string& addr, unsigned short port)> async_accept_handler =
        [](lobby& self, const std::string& addr, unsigned short port) 
      {
        ...
      };
     
      script_dict["lobby_class"=
        py::class_<lobby, boost::noncopyable>("lobby_class", py::no_init)
        .def("name", &lobby::name)
        .def("async_accept", async_accept)
        ;
     
     
    // 성공
    void async_accept(lobby& l, const std::string addr, unsigned short port)
    {
        …
    }
     
      script_dict["lobby_class"=
        py::class_<lobby, boost::noncopyable>("lobby_class", py::no_init)
        .def("name", &lobby::name)
        .def("async_accept", async_accept)
        ;
     
    // 성공
    template < typename Self >
    void async_accept_handler(Self& self, const std::string& addr, unsigned short port)
    {
      ..
    }
     
      script_dict["lobby_class"=
        py::class_<lobby, boost::noncopyable>("lobby_class", py::no_init)
        .def("name", &lobby::name)
        .def("async_accept", async_accept<lobby>)
        ;
     
     
    // 성공
      void (*async_accept)(lobby& self, const std::string& addr, unsigned short port) =
        [](lobby& self, const std::string& addr, unsigned short port) 
      {
        ...
      };
     
      script_dict["lobby_class"=
        py::class_<lobby, boost::noncopyable>("lobby_class", py::no_init)
        .def("name", &lobby::name)
        .def("async_accept", async_accept)
        ;
     
     
    cs


    람다를 멤버함수로 정의해서 쓰려고 했는데 되더라. 어쨌거나 하긴 했는데 이쁘진 않다.

    반응형
Designed by Tistory.