Upgrade to Pro — share decks privately, control downloads, hide ads and more …

conanが使いづらいのでpoacを作っている話 / conan-to-poac

conanが使いづらいのでpoacを作っている話 / conan-to-poac

Learn Languages 2018 in ODC でのプレゼン資料です

Avatar for Ken Matsui

Ken Matsui

August 26, 2018
Tweet

More Decks by Ken Matsui

Other Decks in Programming

Transcript

  1. ΫϥΠΞϯταΠυ main.cpp inference.hpp install.hpp exception [ subcmd or option?, arg2,

    arg3 ] subcmd or option? -> install [ arg2, arg3 ] $ poac install arg2 arg3
  2. ΫϥΠΞϯταΠυͷਪ࿦աఔ template <typename S, typename OpTypeE, typename VS, typename =

    std::enable_if_t<std::is_rvalue_reference_v<VS&&>> > auto _apply(S&& func, const OpTypeE& cmd, VS&& arg) { return branch(std::move(func), cmd, std::move(arg)); } template <typename S, typename VS, typename = std::enable_if_t<std::is_rvalue_reference_v<VS&&>> > std::string apply(S&& func, const S& cmd, VS&& arg) { namespace except = core::exception; if (auto itr = subcmd_map.find(cmd); itr != subcmd_map.end()) return _apply(std::move(func), itr->second, std::move(arg)); else if (itr = option_map.find(cmd); itr != option_map.end()) return _apply(std::move(func), itr->second, std::move(arg)); else throw except::invalid_first_arg("Invalid argument"); }
  3. ΫϥΠΞϯταΠυͷਪ࿦աఔ // Create function pointer table: { &func<0>, &func<1>, ...

    } // Execute function: &func<idx>[idx]() template <size_t... Is, typename VS, typename = std::enable_if_t<std::is_rvalue_reference_v<VS&&>>> static auto execute(std::index_sequence<Is...>, int idx, VS&& vs) { // Return ""(empty string) because match the type to the other two functions. return make_array({ +[](VS&& vs){ return (op_type_list_t::at_t<Is>()(std::move(vs)), ""); }... })[idx] (std::move(vs)); } template <size_t... Is> static auto summary(std::index_sequence<Is...>, int idx) { return make_array({ +[]{ return op_type_list_t::at_t<Is>::summary(); }... })[idx](); } template <size_t... Is> static auto options(std::index_sequence<Is...>, int idx) { return make_array({ +[]{ return op_type_list_t::at_t<Is>::options(); }... })[idx](); }
  4. αϒίϚϯυ ▸ JOTUBMM   ύοέʔδΛΠϯετʔϧ ▸ VOJOTUBMM  

    ύοέʔδΛΞϯΠϯετʔϧ ▸ TFBSDI   ύοέʔδΛݕࡧ ▸ JOJU    QPBDZNMϑΝΠϧΛੜ੒ ▸ OFX   ϓϩδΣΫτςϯϓϨʔτΛੜ੒ ▸ QVCMJTI   ࣗ࡞ύοέʔδΛެ։ ▸ MPHJO   ϩάΠϯ͢Δ ▸ SPPU   QPBDͷΠϯετʔϧઌύεΛදࣔ ▸ DBDIF   DBDIFͷૢ࡞Λߦ͏ ▸ VQEBUF   ύοέʔδΛΞοϓσʔτ ▸ EPD    υΩϡϝϯτΛੜ੒ ▸ CVJME   Ϗϧυ͢Δ ▸ SVO    Ϗϧυͱ࣮ߦΛߦ͏ ͕࣌ؒ
 ͋Ε͹
 ࣮૷༧ఆ