Простой класс с явным конструктором преобразования.
class MyDouble {
double d;
public:
MyDouble() : d(0) {}
explicit MyDouble(double d_) : d(d_) {}
MyDouble & operator =(double d_) {
d = d_; return *this;
}
};
Я специально добавляю задание, чтобы его можно было сконструировать из double
,
MyDouble a;
a = 1.1; // this works
MyDouble b = MyDouble(1.1); // this works
MyDouble c(1.1); // this works
MyDouble d = 1.1; // this does not work
Я не хочу неявного преобразования, потому что это вызовет некоторые другие проблемы. Но я все еще хочу работу прямого назначения, но это не так. В любом случае, чтобы сделать последнее заявление MyDouble d = 1.1;
работать без удаления explicit
ключевое слово.
Ответ на ваш вопрос «нет», нет возможности разрешить MyDouble d = 1 .; без удаления явного.
Вы можете просто использовать MyDouble d (1.); или MyDouble d {1.}; вместо использования присваивания-инициализации. Это позволит вам сохранить явное, а также будет ясно, что вы инициализируете.
Других решений пока нет …