假设以下代码段:
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) {