template <typename A>
class TMP1
{
...
TMP1() { ... } /* Вариант 1. */
...
};
и
template <typename A>
class TMP2
{
...
TMP2<A>() { ... } /* Вариант 2. Зачем введена такая запись конструктора? Как она может использоваться в отличном от первого варианта контексте */
...
};
Такая запись работает при компиляции Borland C++ и g++ ( на других не проверял )
Здравствуйте, chukichuki, Вы писали:
C>Здравствуйте, Андрей, Вы писали:
А>>Здравствуйте, chukichuki, Вы писали: А>>Ничем не отличается, вариант 2 избыточен, но допустим
C>Тогда зачем такой вариант введен в язык ?
Здравствуйте, Lorenzo_LAMAS, Вы писали:
А>>Ничем не отличается, вариант 2 избыточен, но допустим
L_L>Интересно только, что вне класса таким образом конструктор определить не получится
Ну так это без базаров. Вопрос-то был про инлайновые методы, насколько я понял из кода.
ну, если не лень писать, то почему бы и нет?
с другой стороны, лично я шаблоны далеко не каждый день пишу и было время, когда я путался, где надо <C> писать, а где не надо
а в таком варианте думать не надо
А я и сейчас так думаю, вот диагностика того, что имею под рукой
template<class>
class A
{
public:
A();
};
template<class T>
A<T>::A<T>()
{
}
icc 7.1
c.C(11): error: overloaded function "A<<unnamed>>::A" is not a template
A<T>::A<T>()
^
compilation aborted for c.C (code 2)
g++ 3.2.3
c.C:12: `A<T>' specified as declarator-id
c.C:12: no `int A<<anonymous template type parameter> >::A<T>()' member
function declared in class `A<<anonymous template type parameter> >'
c.C:12: template definition of non-template `int A<<anonymous template type
parameter> >::A<T>()'
Comeau online
"ComeauTest.c", line 11: error: overloaded function "A<<unnamed>>::A" is not a
template
A<T>::A<T>()
^
1 error detected in the compilation of "ComeauTest.c".
Of course, the code must be complete enough to compile and link.
template<class>
class CTest
{
public:
CTest();
};
template<class A>
CTest<A>::CTest<A>()
{
}
int main()
{
CTest<int> aa;
return 0;
}
что-то здесь не то. я знаю, что этот код компиляться не должен.
но VC7.1 и IC8.0 кушают его даже без ворнингов
причем, точно в том виде, в котором ты написал, то есть template<class>
Здравствуйте, Lorenzo_LAMAS, Вы писали:
B>>Быть может имелось ввиду
L_L>Так ведь можно это Т опустить, я и не стал его писать. Оно к делу не относится.