title: can meta function generate declaration according to the variadic params
body: <p>I have a function table which contains functions defined somewhere, all the functions may have different param count but have the same param type(that's <code>var</code>); the functions will be called by a delegator named <code>caller</code>,it gets the function address by a name.</p>
  <p>I could not directly forward the args of caller to the function ptr and want to covert them all to <code>var</code>,because the miss-type params may be corrupt the stack.</p>
  <p>for example, if the original function is int(*)(int,int),but call it using (double,double) may be undefined.</p>
  <p>I wonder how to define type to declare a function proto from Args...,for example,
  caller(int,int)==&gt;ftype::type will be int(*)(var,var);
  caller(char)==&gt;ftype::type will be int(*)(var)...etc.</p>
  <pre><code>template&lt;typename...A)
  struct ftype{
  using type=????//todo
  };
  
  class var{
  public:
  var(int);
  var(double);
  var(bool);
  var(char)
  var(unsigned);
  var(char*);
  var(const char*);
  };
  
  using voidfptr= void(*)();
  
  extern std::map&lt;string,voidfptr&gt; g_f_tables;
  
  template&lt;typename...Arg&gt;
  int caller(std::string&amp; name,Arg&amp;&amp;...args)
  {
      using fptr= ftype&lt;args..&gt;::type;
      voidfptr = g_f_tables[name];
      auto _f = (ftpr)(g_fptr);
      if(_f) throw;
  
      _f(std::forward&lt;Arg&gt;(args...));
      return 0;
  }
  
  int main(){
      caller(1,2,3;
      caller(1,2);
       
      return 0;
  }
  </code></pre>