К-во аргументов в шаблонном методе
От: Logot Украина  
Дата: 30.07.08 18:05
Оценка:
Не пойму, что имеет ввиду Александреску, цитата:

Шаблонная функция-член не может иметь несколько аргументов, заданых по умолчанию



template<class T = int, class U = double>
class A
{
  void foo();
};

template<class T, class U>
void A<T, U>::foo()
{
}


может это?

template<class T>
class B
{
  void foo(int val = 100);
};

template<class T>
void B<T>::foo(int val /* = 100*/)
{
}


или это?

template<typename T = int, typename U = double>
class C
{
  void foo();
}

template<typename T = int, typename U = double> //error compile (default template arguments may not be used in function templates)
void C<T, U>::foo()
{
}


поясните плиз
Re: К-во аргументов в шаблонном методе
От: Bell Россия  
Дата: 31.07.08 04:31
Оценка:
Здравствуйте, Logot, Вы писали:

L>Не пойму, что имеет ввиду Александреску, цитата:


L>

L>Шаблонная функция-член не может иметь несколько аргументов, заданых по умолчанию



L>
L>template<class T = int, class U = double>
L>class A
L>{
L>  void foo();
L>};

L>template<class T, class U>
L>void A<T, U>::foo()
L>{
L>}
L>


L>может это?

Нет, здесь речь идет о шаблоне класса.

L>
L>template<class T>
L>class B
L>{
L>  void foo(int val = 100);
L>};

L>template<class T>
L>void B<T>::foo(int val /* = 100*/)
L>{
L>}
L>


L>или это?

Нет, здесь речь о шаблоне класса и параметре по умолчанию.

L>
L>template<typename T = int, typename U = double>
L>class C
L>{
L>  void foo();
L>}

L>template<typename T = int, typename U = double> //error compile (default template arguments may not be used in function templates)
L>void C<T, U>::foo()
L>{
L>}
L>


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

L>поясните плиз

Скорее всего речь об этом:

//------------------------------------------------
//Ok
template<class T = int, class U = int>
class test1 {};

//------------------------------------------------
//Ok
template<class T = int, class U = int>
class test2
{
   void mf2(T t, U u);
};

template<class T, class U>
void test2<T, U>::mf2(T t, U u) {}


//------------------------------------------------
//Так нельзя - шаблон функции не может иметь аргументы по умолчанию
template<class T = int, class U = int>
void f1(T t, U u) {}

//------------------------------------------------
//Так нельзя - шаблон функции-члена не может иметь аргументы по умолчанию
class test3
{
   template<class T = int, class U = int>
   void mf3(T t, U u);
};

template<class T, class U>
void test3::mf3(T t, U u) {}
Любите книгу — источник знаний (с) М.Горький
Re[2]: К-во аргументов в шаблонном методе
От: _nn_ www.nemerleweb.com
Дата: 31.07.08 05:07
Оценка:
Здравствуйте, Bell, Вы писали:

<skip/>

Для функции как раз шаблонные аргументы по умолчанию не нужны.
Можно просто перегрузить:
template<typename T>
void f(T);

template<typename U, typename V>
void f(U, V);


А вот классы, к сожалению, нельзя.
Вот там как раз и нужны значения по умолчанию из-за отсутствия "перегрузок" класса.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: К-во аргументов в шаблонном методе
От: Logot Украина  
Дата: 31.07.08 10:40
Оценка:
Здравствуйте, Bell, Вы писали:

B>Скорее всего речь об этом:


B>//------------------------------------------------
B>//Ok
B>template<class T = int, class U = int>
B>class test1 {};

B>//------------------------------------------------
B>//Ok
B>template<class T = int, class U = int>
B>class test2
B>{
B>   void mf2(T t, U u);
B>};

B>template<class T, class U>
B>void test2<T, U>::mf2(T t, U u) {}


B>//------------------------------------------------
B>//Так нельзя - шаблон функции не может иметь аргументы по умолчанию
B>template<class T = int, class U = int>
B>void f1(T t, U u) {}
B>

Он говорил, о методе класса, а не о глобальной шаблонной функции

B>//------------------------------------------------
B>//Так нельзя - шаблон функции-члена не может иметь аргументы по умолчанию
B>class test3
B>{
B>   template<class T = int, class U = int>
B>   void mf3(T t, U u);
B>};

B>template<class T, class U>
B>void test3::mf3(T t, U u) {}
B>


Так шаблонная функция-член не может иметь даже и один аргумент по умолчанию. Привожу цитату полностью:

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



Или это так класно перевели?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.