如果Foo
没有任何其他转换运算符并且没有定义间接运算符,那么您可以依赖于*a_foo
将提供对所需类型的函数的引用的事实.从那里,你只需要提取返回和参数.
func_ref_traits
这里将进行提取:
templatestruct func_ref_traits; template struct func_ref_traits { using ret = Ret; using args = std::tuple ; };
然后conv_func_traits
将计算出给定类型的函数类型:
templateusing conv_func_traits = func_ref_traits ())>;
你会像这样使用它:
conv_func_traits::args //std::tuple conv_func_traits ::ret //int