Я переписываю библиотеку, где один из «интерфейсов» является глобальной числовой переменной (не спрашивайте).std :: min/std :: max с «intrinsic-like»
я заменить его глобальным объект UDT, который действует как числовые, поддерживая operator int() const
Некоторых потребителей в доме моей библиотеки использования станда :: макс с этим глобальным. Они будут получать ошибки компиляции, потому что станд :: макс ожидает только один Т.
Например:
PseudoInt x; // in library
// in consumer
void conumser()
{
int y = std::max(5, x); // will error now, because int and PseudoInt are not the same T
}
Я бы оптимально, как мои потребители не должны реагировать, делая такие вещи, как std::max<int>(5, x)
.
Мне повезло здесь?
Почему бы не написать свою собственную функцию max, которая берет 'PseudoInt', а затем передает ее на' std :: max'? – NathanOliver
Может быть, если вы создадите неявный конструктор из int в этот тип данных и специализацию шаблона для std :: max? Но явный вызов с int как аргументом шаблона не будет работать. – languitar
Не добавляйте неявные конструкторы! Еа! –