fork download
  1. #include <iostream>
  2. #include <functional>
  3.  
  4. class VoidType{
  5.  
  6. public:
  7. template<class ...Arge>
  8. virtual int operator()(Arge ...Arges){return 0; }//戻り型がチープ。継承先の戻り型を設定したい。
  9. };
  10.  
  11.  
  12. template<class F>
  13. class AnyFunction:VoidType{
  14. std::function<F> Fun;
  15.  
  16. public:
  17. AnyFunction(std::function<F> F){
  18. Fun = F;
  19. }
  20. AnyFunction() = delete;
  21.  
  22. template<class ...Arge>
  23. typename std::function<F>::result_type operator ()(Arge ...Arges){
  24. return Fun(Arges...);
  25. }
  26. };
  27.  
  28. int main(){
  29. AnyFunction<int(int)> F([](int N)->int{std::cout << N << std::endl; return N; });
  30. VoidType& Fn = F;
  31. int R = Fn(10);
  32.  
  33.  
  34. return 0;
  35. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.cpp:8:2: error: templates may not be ‘virtual’
  virtual int operator()(Arge ...Arges){return 0; }//戻り型がチープ。継承先の戻り型を設定したい。
  ^
prog.cpp:8: confused by earlier errors, bailing out
Preprocessed source stored into /home/GDRMha/cciVKy2q.out file, please attach this to your bugreport.
stdout
Standard output is empty