Шаблоны в Си++ = ошибки времени выполнения связанные с типом Visual Studio 2010 игнорировать ошибки
Primary tabs
Очень интересны "ошибки" о которых предупреждает Visual Studio относительно операций, специфичных дял определённого типа в коде шаблона, например - вот ограниченная условием спецификация вывода на экран значения типа string (для int - другой вывод) =
if (typeid(C)==typeid(int))
{
printf("\nYou've add = %i \n",value);
/*интересно то, что елси дальше поставить
проверку типа вроде =
if (itype==1)
то компилятор будет ругаться говоря, что
например для int метод .c_str()
не определён*/
} else if (typeid(C)==typeid(std::string))
{
// char* val = (char *) *(value).c_str();
char* val = (char *) value.c_str();
printf("\n You've add = %s \n",val);
}
текст ошибки =
error C2228: left of '.c_str' must have class/struct/union
type is 'int'
while compiling class template member function 'void Dlist<C>::Add(C)'
with
[
C=int
]В комментариях указано - что проверка, которую предполагалось проводить с помощью значения itype
(которое в моей задаче оказывалось также производным от значения возвращаемого typeid(C) ) - также
не позволяет уговорить студию при стандартных настройка скомпилировать код -
да и куда там - когда не работает явная спецификация if (typeid(C)==typeid(std::string)) -
а ведь для string метод c_str() определён всегда ...
Соответственно - надо найти способ игнорировать предупреждение об ошибке, которой на самом деле не существует.
Но игнорировать ошибку не получается.
Но всё же удаётся избавиться от надоевшего уведомления путем "прогона" параметра
через вид "указатель на безтиповую память", а именно=
if (typeid(C)==typeid(int))
{
printf("\nYou've add = %i \n",value);
/*интересно то, что елси дальше поставить
проверку типа вроде =
if (itype==1)
то компилятор будет ругаться говоря, что
например для int метод .c_str()
не определён*/
} else if (typeid(C)==typeid(std::string))
{
// char* val = (char *) *(value).c_str();
void* str2 = &value; // получаем безтиповый указатель
// далее приводим к указателю "на строку"
std::string * str = static_cast<std::string *>(str2);
/*далее чтобы получить доступ к строке-объекту
достаточно просто разыменовать указатель*/
char* val = (char *) (*str).c_str();
printf("\n You've add = %s \n",val);
}идея преобразования основана на этом примере
- Log in to post comments
- 3246 reads