c++神奇模板

原创
2021/08/07 16:15
阅读数 79

#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.);
}

 

在足够的编程技巧面前,设计模式都是浮云。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部