Advertisement
Guest User

Callable

a guest
Dec 12th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.86 KB | None | 0 0
  1. class CallableBase
  2. {
  3. public:
  4.     virtual bool call(int x) = 0;
  5. };
  6.  
  7. template<class T>
  8. class Callable : public CallableBase
  9. {
  10.     T t_;
  11. public:
  12.     explicit Callable(T t)
  13.         : t_(t)
  14.     {
  15.     }
  16.  
  17.     Callable& operator=(T t)
  18.     {
  19.         t_ = t;
  20.         return *this;
  21.     }
  22.  
  23.     bool call(int x) override
  24.     {
  25.         return t_(x);
  26.     }
  27. };
  28.  
  29. bool func(int x)
  30. {
  31.     return x == 2;
  32. }
  33.  
  34. int main()
  35. {
  36.     std::function<bool(int)> f;
  37.     constexpr int ss = sizeof(f);
  38.  
  39.     auto la = [](int x) { return x > 5; };
  40.     constexpr int sla = sizeof(la);
  41.  
  42.     CallableBase* cb = new Callable<decltype(la)>(la);
  43.  
  44.     std::cout << cb->call(2) << std::endl;
  45.     std::cout << cb->call(10) << std::endl;
  46.  
  47.     delete cb;
  48.  
  49.     using pf_t = bool(*)(int);
  50.  
  51.     pf_t pf = &func;
  52.  
  53.     CallableBase* cb2 = new Callable<bool(*)(int)>(&func);
  54.  
  55.     std::cout << cb2->call(2) << std::endl;
  56.     std::cout << cb2->call(10) << std::endl;
  57.  
  58.     delete cb2;
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement