У меня есть класс с 2 конструкторами.
explicit MyClass(size_t num);
template<class T> MyClass(T myObj);
И я хочу, чтобы каждый раз, когда я делаю
MyClass obj( 30 );
Первый конструктор будет называться,
И на неявных конструкторах и
MyClass obj = 30;
Второй ctor будет называться.
Как я могу это сделать?
30 — целочисленное значение со знаком, поэтому оно не совсем соответствует сигнатуре вашего первого конструктора (следовательно, создается экземпляр шаблона).
Вы можете либо изменить подпись явного конструктора, чтобы принять int
, и тогда Myclass obj( 30 );
вызовет явный конструктор или вызовет его с помощью 30u
так что вы соответствуете явной подписи.
Других решений пока нет …