у меня есть, в какой-то момент в моем коде, перегрузка, как этотC++ шаблоны, использование enable_if для двух различных реализации оператора
template<int L>
template<int M>
inline StaticMemory<L>& StaticMemory<L>::operator =(const StaticMemory<M>& _m)
{
if (this != &_m) { //Problem here!
set_ui(this->mem, _m.mem, L, M);
}
return *this;
}
Что происходит в том, что проверка я выделил в основном неправильно, потому что когда L != M
сравнение указателей не является валидным, если я не брошу его. Возможно, я мог бы наложить указатель, но есть ли способ использовать std::enable_if
, чтобы написать две разные версии такого оператора?
Thx
Что вы спрашиваете? Вы спрашиваете, можете ли вы написать одну версию функции, когда 'L == M' и другую версию функции, когда' L! = M'? –
Да, это то, о чем я прошу. – user8469759
Вызов 'M == L' не является тривиальным, поскольку он появляется. Только явный вызов будет делать это: 'l1-> operator = (l2);' иначе назначение копии будет вызовом. –
Jarod42