c++神奇模板

#include "iostream"

template<class... Fs>
struct overload_set;

template<class F>
struct overload_set<F> : F {
   overload_set(F &&x) : F(std::forward<F>(x)) {}

   using F::operator();
};

template<class F, class... Fs>
struct overload_set<F, Fs...> : F, overload_set<Fs...> {
   overload_set(F &&x, Fs &&... xs) : F(std::forward<F>(x)), overload_set<Fs...>(std::forward<Fs>(xs)...) {}

   using F::operator();
   using overload_set<Fs...>::operator();
};

template<class... Fs>
overload_set<Fs...> overload(Fs &&... xs) {
   return overload_set<Fs...>(std::forward<Fs>(xs)...);
}

int main() {
   auto o = overload(
           [](int) { std::printf("Hello, "); },
           [](double) { std::printf("World!\n"); }
   );
   o(1);
   o(1.);
}

 

在足夠的編程技巧面前,設計模式都是浮雲。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章