Re[2]: Чего-то подзабыл плюсы. Специализация
От: pavel.yurchenko Украина  
Дата: 25.08.10 08:23
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Способ номер два:

К>
К>template<class T> class getset // и специализируй его сколько влезет
К>{
К>  T data;
К>public:
К>  T get() {...}
К>  void set(T) {...}
К>};

К>template<class T> class X : public getset<T>
К>{
К>  .......
К>};
К>

К>Этот подход и идеологически чище, и даёт больше возможностей, поскольку частичная специализация функций невозможна, а с классами творят чудеса.

второй способ очень красивый. Не удержался и сам попробовал:


template<class T> class getset // и специализируй его сколько влезет
{
    T data;
public:
    T get() { return data; }
    void set(T value) { data = value; }
};

template<> class getset<int> // и специализируй его сколько влезет
{
    int data;
public:
    int get() { return -1; }
    void set( int data ) { data = -2; }
};


template<class T> class X : public getset<T>
{
};


int main( int argc, char * argv[] )
{
    std::cout << "test" << std::endl;
    
    typedef float floatType;
    typedef int intType;
    
    X<floatType> fName;
    fName.set( 10.5 );
    std::cout << "float instance value = " << fName.get() << std::endl;
    
    X<intType> iName;
    iName.set( 9 );
    std::cout << "int instnce value = " << iName.get() << std::endl;
    
    return 0;
}


На выводе:
testfloat instance value = 10.5
int instnce value = -1

То есть работает замечательно.

+1
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.