Re: перегрузка методов
От: Sm0ke Россия ksi
Дата: 03.11.06 09:05
Оценка:
Здравствуйте, 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>Спасибо!

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

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

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

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

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

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


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

т.е. везде добавляем ещё один параметр Type2Type<ResultType>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.