Здравствуйте, Кодт, Вы писали:
К>Способ номер два:
К>К>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