|
|
|
| код:
#include <iostream>
template <class type>
void func(type var)
{
//var*=var;
std::cout << std::endl << var;
}
int main()
{
int x = 1;
//int* x;
func(x);
return 0;
}
Функция func принимает переменную типа type (template) и выводит на экран ее содержимое.
В аргументе функции ничего не сказано об указателях(type var). Если раскомментировать int* x; и x*=x; и закомментировать int x = 1; то компилятор ругается матом, это очевидно, потому что указатель умножается на указатель. Вопрос вот в чем, почему шаблонная функция имеет право принимать адрес? Как защитить функцию от указателей, если для функции требуются только типы данных для арифметических вычислений.
PS рассматривал вариант разыменования указателя, но как определить что это указатель или переменная =) | |
|
|
|
|
|
|
|
для: Drive.it
(19.04.2012 в 21:20)
| | Как вариант не использовать указатели вообще, только ссылки. Указатели - это инструмент C, в C++ не поощряется использование указателей, так как они позволяют обходить строгую типизацию, что и происходит в вашем случае. Либо все знайте и предусматривайте заранее, либо отказывайтесь от указателей вообще. | |
|
|
|