假设以下代码段:

template <class T>
void fct(T* a, T* b){
  // do something
}

A a;
fct(&a, nullptr); // Problem here!

这很麻烦,因为调用参数的类型为A*nullptr_t,因此编译器无法推断出模板参数T

通常,我可以想象出几种解决方法:
  • 定义A* b = nullptr并使用fct(&a, b)
  • 对于fct情况
  • ,使用nullptr的一个参数定义重载
  • 使用fct(&a, static_cast<A*>(nullptr))

  • 还是有一个更干净的解决方案,例如创建“typed nullptr”之类的东西?

    最佳答案

    只需将第二个参数设为非推论上下文即可,例如:

    template <class T>
    void fct(T* a, std::remove_reference<T*>::type b) {
    

    09-25 16:29
    查看更多