检查c ++中是否存在具有给定签名的函数

kam*_*iro 2 c++ templates metaprogramming

所以我一直在寻找检查具有特定参数的函数是否存在的方法.我有一个模板化的方法,它依赖于一个外部函数(来自类的外部)来完成这项工作:

  template <class Moo>
  void exportDataTo(Moo& ret){
     extended_solid_loader(ret, *this);
  }
Run Code Online (Sandbox Code Playgroud)

在项目的多个点我有宏为不同类型定义extended_solid_loader,但现在我希望能够使用默认函数,如果没有为该特定类类型定义extended_solid_loader.

我遇到过这样的问题: 是否可以编写模板来检查函数的存在? 但它似乎有点不同,因为我没有检查方法,而是检查具有特定参数类型的函数.

这可能吗?

Bjö*_*lex 5

您可以只提供一个函数模板来extended_solid_loader提供默认实现,而想要使用默认实现以外的其他用户的用户只需要这样做.

template<class T>
void extended_solid_loader(T & ret, SomeClass & obj) {
    // default implementation here
}

template<>
void extended_solid_loader<MooClass>(MooClass & ret, SomeClass & obj) {
    // special implementation for MooClass here
}
Run Code Online (Sandbox Code Playgroud)