Здравствуйте, Аноним, Вы писали:
А>Ситуация примерно такая:
А>существует несколько 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. пример не проверялся на работатоспособность..
На самом деле, люди не читают газеты, они принимают их каждое утро, так же как ванну. ©Маршалл Мак-Льюэн