Re[2]: перегрузка методов
От: solearis  
Дата: 03.11.06 09:08
Оценка:
Здравствуйте, Sm0ke, Вы писали:

S>Здравствуйте, solearis, Вы писали:


S>>Уважаемые, подскажите пожайлуста по такому вопросу,

S>>хотел бы реализовать метод который бы в зависимости от входного параметра
S>>(ну и дополнительной логики в нутри класса),
S>>возвращал бы разные типы данных..

S>>BOOL Class::GetValue(LPCTSTR lp)

S>>{
S>> ...
S>> return TRUE;
S>>}

S>>int Class::GetValue(LPCTSTR lp)

S>>{
S>> int n;
S>> ...
S>> ...
S>> return n;
S>>}

S>>LPCTSTR Class::GetValue(LPCTSTR lp)

S>>{
S>> ...
S>> return lp;
S>>}
S>>и т.д......

S>>Я так понял что перегружать метод таким образом нельзя,

S>>(т.е обязательно необходимы разные типы или колличество входящих параметров)
S>>поскажите плс. возможные способы решения.
S>>Спасибо!

S>Способ решения взят из книги modern c++ design


S>
S>template <typename T>
S>struct Type2Type
S>{
S>    typedef T OriginalType;
S>};

S>class some
S>{
S>public:
S>    int do_some(some & other, Type2Type<int>)
S>    {
S>        return 0;
S>    }

S>    float do_some(some & other, Type2Type<float>)
S>    {
S>        return 0.0;
S>    }

S>        // или шаблон
S>    template <typename ResultType>
S>    ResultType do_some(some & other, Type2Type<ResultType>)
S>    {
S>        return T();
S>    }
S>};

S>void fn_test()
S>{
S>    some obj, obj2;
S>    float f= obj.do_some(obj2, Type2Type<float>() );
S>}
S>


S>Перегрузка методов не должна отличаться только по типу результата.


S>т.е. везде добавляем ещё один параметр Type2Type<ResultType>


ага... спасибо! , сейчас попробую..
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.