Взгляните на это: Неявное преобразование функции остановки
Мне удалось адаптировать его к вашей проблеме, и он не позволяет программе связываться. Информация в приведенном выше потоке кажется частично неверной, потому что пример скомпилирован нормально. Не удалось связать, потому что не была определена специализация шаблона. На самом деле я немного удивлен, что следующее сработало для int vs unsigned int.
template <class T>
void foo(const T& t);
template <>
void foo<unsigned int>(const unsigned int& t)
{
}
int main(){
foo((unsigned int) 9); // will compile and link
unsigned int value(5);
foo(value);// will compile and link
foo(9.0); // will not link
foo(-9); // will not link
return 0;
}
Я думаю, что вы, возможно, слишком долго об этом думаете. Неужели это проблема? Было бы лучше для начала сделать ваш тип идентификатора int? Есть ли минимальный / максимальный идентификатор, который позволяет избежать больших чисел, которые могут быть ошибочно приняты за комплимент для двоек? Это похоже на досадную проблему с языком, поскольку он не предоставляет простого способа остановить неявное приведение.
Я протестировал этот пример с Visual Studio 2010. Кроме того, у меня не было времени написать тестовый класс, поэтому, если он вас интересует, вам придется адаптировать пример к классу foo, чтобы увидеть, работает ли он с конструктором класс, или, если есть другой способ использовать шаблоны для этого. Основываясь на других ответах и моем опыте, я не думаю, что вы найдете простой способ делать то, что хотите.
person
shawn1874
schedule
20.01.2014
(-1, 0)
. Введите строку, затем преобразуйте ее в целое число без знака, используяstrtoul()
. Он сообщит об ошибке, если число было отрицательным. - person   schedule 02.09.20131 << width
, гдеwidth
- количество бит вunsigned int
. - person   schedule 02.09.2013b = -1
функции, вы должны запускать условие при запуске иexit
со значениемEXIT_FAILURE
. Но проблема в том, что входные значения определены какunsigned int
, что означает, чтоb
будет равно максимальному значению, доступному для типаunsigned int
в вашей системе. Может быть, проблема в чем-то другом? - person mesmerizingr   schedule 02.09.2013