Обобщенные Вектора

<!--StartFragment -->

\"Пока все хорошо,\" - можете сказать вы, - \"но я хочу, чтобы один из этих векторов был типа matrix, который я только что определил.\" К сожалению, в C++ не предусмотрены средства для определения класса векторов с типом элемента в качестве параметра. Один из способов - продублировать описание и класса, и его функций членов. Это не идеальный способ, но зачастую вполне приемлемый.

Вы можете воспользоваться препроцессором, чтобы механизировать работу. Например, класс vector - упрощенный вариант класса, который можно найти в стандартном заголовочном файле. Вы могли бы написать:


.html#include
declare(vector,int);
main()
{
vector(int) vv(10);
vv[2] = 3;
vv[10] = 4; // ошибка: выход за границы
}


Файл vector.h таким образом определяет макросы, чтобы declare(vector,int) после расширения превращался в описание класса vector, очень похожий на тот, который был определен выше, а implement(vector,int) расширялся в определение функций этого класса. Поскольку implement(vector,int) в результате расширения превращается в определение функций, его можно использовать в программе только один раз, в то время как declare(vector,int) должно использоваться по одному разу в каждом файле, работающем с этим типом целых векторов.

declare(vector,char);
//...
implement(vector,char);

даст вам отдельный тип "вектор символов".



Опубликовал admin
23 Мар, Вторник 2004г.



Программирование для чайников.