Re: Как изменить сообщение об ошибке компилятора?
От: folk Россия  
Дата: 06.02.04 03:45
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Ситуация примерно такая:


А>существует несколько overloaded функций,создающих объект полиморфного класса. Необходимо изменить сообщение о стандартной ошибке, если нет ни одной подходящйе функции для исходного обьекта этого типа..


А>например:


А>
А>class unknown
А>{
А>public:
А>    virtual ~_void() {};
А>}

А>class Test1: unknown
А>{
А>public:
А>    virtual ~Test1() {};
А>}

А>class Test2: unknown
А>{
А>public:
А>    virtual ~Test2() {};
А>}

А>class container
А>{
А>public:
А>    virtual void name()=0;
А>}

А><template class T>
А>class simple_container: container
А>{
А>public:
А>    virtual void name() {   printf("%s",typeid(T).name());   };
А>}

А>class class_container: container
А>{
А>    unknown *object;
А>public:
А>    class_container(unknown * obj):object(obj) {}
А>    virtual void name() {   printf("%s",typeid(*object).name());   };
А>}

А>#define TC(type) container * cont(type &) {   return new simple_container<type>();   }
А>#define TCC(type) container * cont(type * data) {   return new class_container(data);   }

А>TC(int);
А>TC(float);
А>TC(char);

А>TCC(Test1);
А>TCC(Test2);

А>


А>если, нарпимер, определить еще тип Test3, насдедник от unknown, то он по вполне понятным причинам не будет подходить под синтакиси существующих функций-конструкторов.

А>MSVC выдет сообщние: none of 5 overloaded functions....

А>Как можно именно вот это сообщение и заменить?


Можно сделать чтобы все остальные типы попадали в нерабочий шаблон, но тогда например short также будет попадать в шаблон:

template <class T> void cont(T const volatile&)
{
    struct NoDef;
    NoDef User_defined_error_message;
}



А>P.S. пример не проверялся на работатоспособность..
На самом деле, люди не читают газеты, они принимают их каждое утро, так же как ванну. ©Маршалл Мак-Льюэн
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.