Предположим, следующий фрагмент кода:Дайте nullptr тип для шаблона вычета
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))
Или есть более чистое решение, li ke создание чего-то вроде «типизированного nullptr»?
Как ваш желаемый «типизированный nullptr» может отличаться от 'static_cast (nullptr)'? – Petr
Ваша вторая альтернатива выглядит как лучшая ставка ... перегрузка (специализация шаблона) – basav
Вы уже ответили на вопрос ... 1-я и 3-я альтернативы более или менее одинаковы: вам нужен T *, а nullptr - это не так, что вы запрещаете ' fct (& a, nullptr) ', а второй использует явную перегрузку для его разрешения. Я не могу представить другого ответа ... –