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 でのプレゼン資料です

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    Ϗϧυͱ࣮ߦΛߦ͏ ͕࣌ؒ
 ͋Ε͹
 ࣮૷༧ఆ