Возврат шаблонов - PullRequest
2 голосов
/ 09 июня 2011

Можно ли вернуть шаблон?

Это то, что я пытался, но это не работает.

template<int degree>
class Polynomial
{
public:

   ... ususal stuff ...

   // Polynimal<degree - 1>
   Polynomial derivative() { /* returns a different template */ }

};


int main()
{
   Polynomial<3> cubic;
   Polynomial<2> parabola;

   parabola = cubic.derivative();
}

Возможно ли это?Какой маленький самородок мне не хватает?

Ответы [ 3 ]

6 голосов
/ 09 июня 2011

Вы можете сделать функцию-член шаблоном функции:

template<int ret_degree>
Polynomial<ret_degree> derivative() { /* returns a different template */ }

Или, если вы знаете степень полинома возврата, вы можете сделать что-то вроде этого:

Polynomial<degree-1> derivative() { /* returns a different template */ }
4 голосов
/ 09 июня 2011

degree известно во время компиляции, поэтому вы можете использовать degree -1 в качестве аргумента значения в типе возвращаемого значения:

template<int degree>
class Polynomial
{
public:

   Polynomial<degree-1> derivative() 
   {  
         Polynomial<degree-1> d;
         //...
         return d;
   }
};
int main() {
         Polynomial<3> cubic;
         Polynomial<2> parabola;
         parabola = cubic.derivative();
        return 0;
}

Демо: http://www.ideone.com/44Pc7

3 голосов
/ 09 июня 2011

Я предполагаю, что вы хотите это:

template<int degree>
class Polynomial
{
public:

   ... ususal stuff ...

   // Polynimal<degree - 1>
   Polynomial< degree-1 > derivative() {
     Polynomial< degree-1 > res;
     //assign values
     return res
   }

};

Убедитесь, что в вашей специализации для Polynomial<0> метод derivative не выходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...