Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

рекурсия и шаблоны

724
28 февраля 2005 года
_anton
100 / / 04.11.2002
Где можно почитать про сабж!? Или киньте кто
идею! Из базового класса наследуются векторы на 2,3,4
элемента. Основные методы хочу описать в базовом классе.
Но КАК??? Мне кажется тут рекурсия поможет.
Но как реалзовать??? В общем NEED HELP!!!


namespace vxn_vector
{
template <class Type,unsigned int dim,class argstr>
class vbase : public argstr
{
public:
inline Type& operator[]( const int i ) { return ((Type*)this); }

// ужасно коряво!!!!!!!
inline Type sum ()
{
Type zum=0;
for (int lp=0;lp<dim;lp++) zum+=((Type*)this)[lp];

return zum;
};
////

};




template <class Type>
struct for_4_arg
{
Type X, Y, Z, W;
};
template <class Type>
struct for_3_arg
{
Type X, Y, Z;
};
template <class Type>
struct for_2_arg
{
Type X, Y;
};

}
// 4 args
template <class Type>
class vector4 : public vxn_vector::vbase< Type,4, vxn_vector::for_4_arg<Type> >
{
typedef vxn_vector::vbase< Type,4, vxn_vector::for_4_arg<Type> > vbase;
public:
inline vector4()
{ X = 0; Y = 0; Z = 0; W = 0;};

inline vector4(Type x,Type y,Type z,Type w)
{ X = x; Y = y; Z = z; W = w;};

inline set(Type x,Type y,Type z,Type w)
{ X = x; Y = y; Z = z; W = w;};

inline reset()
{ X = Y = Z = W = 0;};
};
// 3 args
template <class Type>
class vector3 : public vxn_vector::vbase< Type,3, vxn_vector::for_3_arg<Type> >
{
typedef vxn_vector::vbase< Type,3, vxn_vector::for_3_arg<Type> > vbase;
public:
inline vector3()
{ X = 0; Y = 0; Z = 0; };

inline vector3(Type x,Type y,Type z)
{ X = x; Y = y; Z = z; };

inline set(Type x,Type y,Type z)
{ X = x; Y = y; Z = z; };

inline reset()
{ X = Y = Z = 0;};
};
// 2 args
template <class Type>
class vector2 : public vxn_vector::vbase< Type,2, vxn_vector::for_2_arg<Type> >
{
typedef vxn_vector::vbase< Type,2, vxn_vector::for_2_arg<Type> > vbase;
public:
inline vector2()
{ X = 0; Y = 0; };

inline vector2(Type x,Type y)
{ X = x; Y = y; };

inline set(Type x,Type y)
{ X = x; Y = y; };

inline reset()
{ X = Y = 0;};

};
724
01 марта 2005 года
_anton
100 / / 04.11.2002
Народ! Спасайте! Кто всётаки очхорошо шарится в темплатах??? SOS!!! А то повешусь и мировой терроризм придёт в упадок...
430
01 марта 2005 года
craftyfox
157 / / 20.02.2000
Цитата:
Originally posted by _anton
Народ! Спасайте! Кто всётаки очхорошо шарится в темплатах??? SOS!!! А то повешусь и мировой терроризм придёт в упадок...



Андрей Александреску неплохо "шарится в темплатах"...


Непонятно, все-таки, в чем собс-но задача,
почему, например, не так:

Код:
template <class Type,int dim>
struct TArr
{
    Type X[dim];

    Type& operator[]( const int i )
    {
        return X;
    }
    Type sum ()
    {
        Type zum=(Type)0;
        for (int i=0;i<dim;i++)
             zum+=X;
        return zum;
    };
    //и т.д. ...
};


с рекурсией, может быть, могло быть что-нить вроде:
Код:
template <class Type,unsigned dim>
struct TArrR
{
    Type m_data;
    TArrR<Type,dim-1> m_arr;
    operator Type()
    {
        return (Type)m_data;
    };

    Type& operator[]( const int i )
    {
        if(i==0)
            return m_data;
        return m_arr.operator [](i-1);
    };
    Type sum ()
    {
        return m_data+=m_arr.sum();
    }
};

/*Здесь должно было быть:
template<class T>
struct TArrR<T,0>
{
    ....
}
но у меня компилятор частичную спец-ю не
поддерживает...
*/
template <>
struct TArrR<int,0>
{
    int m_data;
    operator int()
    {
        return (int)m_data;
    };
    Type& operator[]( const int i )
    {
            return m_data;
    };
    Type sum ()
    {
        return m_data;
    }
};

???

Во, раскопал:
http://ru.livecode.org/index.php/%D0%9A%D0%BD%D0%B8%D0%B3%D0%B8_%D0%BF%D0%BE_CPP
724
01 марта 2005 года
_anton
100 / / 04.11.2002
ПАСИБЫ!!! Сейчас буду смотреть!!!

Спасибо отдельное за ссылку! Не знал...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог