Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Возвращаемое значение функции - шаблон...


Автор: Fedor 12.12.2005, 21:10
Код

template <class T, long Width, long Height>
class CMatrix
{
public:
//  .......................................
 
   CMatrix<T, Width, Height> Minor( std::vector<long>& v1, std::vector<long>& v2);



Проблема такая:
функция Minor возвращает объект с размерами соответствующих размеров меньше НА кол-во элементов векторов v1 и v2 соответственно.

Насколько я понимаю, подоное не прокатит на этапе выполнения.
Как можно решить эту проблему.
Может, в тупую точно нельзя, тогда как посоветуете решить в обход?

Спс.

Автор: nikitao 12.12.2005, 21:33
Fedor,pls,переформулируй задачи ф-ции ,а то так ничего не ясно(мне). smile


Автор: Fedor 12.12.2005, 21:57
Функция находит минор матрицы.
Минор - это "вычеркивание" некоторых столбцов и некоторых рядков. Вот та матрица, что остается - и есть минор.
Список стоблцов - в векторе v1, список рядков - в векторе v2
Функция возвращает матрицу, образованную вычеркиванием из матрицы (объекта this) столбцов из v1 и рядков из v2.
Т.е. в возвращаемой матрице будет (Width - v1.count) столбцов и (Height - v2.count) рядков. Но ведь в заголовке функции нужно сразу указать параметры шаблона?

Вот вопрос: как можно это сделать?

З.Ы. Надеюсь, понятно оьъяснил? smile

Автор: Void 12.12.2005, 22:06
Цитата(Fedor @ 12.12.2005, 23:57)
Вот вопрос: как можно это сделать?

Есть только один вариант - сделать ф-цию-член Minor шаблонной с двумя параметрами - числом вычеркиываемых столбцов и строк:
Код

template <class T, long Width, long Height>
class CMatrix
{
public:
//  .......................................
   template <long ColsCount, long RowsCount>
   CMatrix<T, Width - ColsCount, Height - RowsCount> Minor( std::vector<long>& v1, std::vector<long>& v2);

Единственное, чего я не могу понять - зачем вообще могли понадобиться матрицы с жестко заданной в compile-time размерностью?

Автор: Fedor 12.12.2005, 22:12
Цитата(Void @ 12.12.2005, 22:06)
Единственное, чего я не могу понять - зачем вообще могли понадобиться матрицы с жестко заданной в compile-time размерностью

Я тоже этого не могу понять, но с ТЗ не поспоришь. smile


Цитата(Void @ 12.12.2005, 22:06)
Есть только один вариант - сделать ф-цию-член Minor шаблонной с двумя параметрами - числом вычеркиываемых столбцов и строк

Спасибо за помощь. Я думаю, мне это подходит. Ибо мне нужно написать только хедеры, а реализация будут делать уже другие. smile

Автор: DeadSoul 12.12.2005, 22:51
Void, такое
template <long ColsCount, long RowsCount>
CMatrix<T, Width - ColsCount, Height - RowsCount> Minor( std::vector<long>& v1, std::vector<long>& v2);
сделать НЕЛЬЗЯ. У тебя две инсталяции данного шаблона будут отличатся только типом возвращаемого значения

Автор: Void 12.12.2005, 23:05
DeadSoul
Ну да. И чем нам это мешает? Comeau принимает на ура.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)