fork(1) download
  1. // PHPのlist風なバインドできないか試してみたかった
  2. // author: Leonardone @ NEETSDKASU
  3. #include <iostream>
  4.  
  5. template<typename T>
  6. class Bind {
  7. int len; T *xs[4];
  8. public:
  9. Bind(T &a) : len(1) { xs[0] = &a; }
  10. Bind(T &a, T &b) : len(2) { xs[0] = &a; xs[1] = &b; }
  11. Bind(T &a, T &b, T &c) : len(3) { xs[0] = &a; xs[1] = &b; xs[2] = &c; }
  12. Bind(T &a, T &b, T &c, T &d) : len(4) { xs[0] = &a; xs[1] = &b; xs[2] = &c; xs[3] = &d; }
  13. Bind* operator= (T ys[]) { for (int i = 0; i < len; i++) *xs[i] = ys[i]; return this; }
  14. };
  15. template<typename X> Bind<X> list(X &a) { return Bind<X>(a); }
  16. template<typename X> Bind<X> list(X &a, X &b) { return Bind<X>(a, b); }
  17. template<typename X> Bind<X> list(X &a, X &b, X &c) { return Bind<X>(a, b, c); }
  18. template<typename X> Bind<X> list(X &a, X &b, X &c, X &d) { return Bind<X>(a, b, c, d); }
  19.  
  20. int main() {
  21. int a = 1, b = 2, c = 3;
  22. int ys[] = {5, 6, 7};
  23.  
  24. std::cout << a << "," << b << "," << c << std::endl;
  25.  
  26. list(a, b, c) = ys;
  27.  
  28. std::cout << a << "," << b << "," << c << std::endl;
  29.  
  30. return 0;
  31. }
Success #stdin #stdout 0s 16064KB
stdin
Standard input is empty
stdout
1,2,3
5,6,7