Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как обьвить шаблонный метод у класса-шаблона за пределами интерфейса этого класса

12K
18 октября 2006 года
momot
7 / / 23.11.2005
Как обьвить шаблонный метод у класса-шаблона за пределами интерфейса этого класса? Указывая реализацию этого метода в интерфейсе - все ок, если пытаюсь сделать это за приделами интерфейсной части (смотрел пример в книге Страуструпа) - не работает, компилятор (Misrosoft Visual Studio 2002 v6.0.9466, компилятор версии 13.00.9466 80х86)
--вот маленький пример ------------------------------------------------
#include <cstdio>

#define INSIDE_INTEFACE_DEFINITION
template <class T> class Number {
public:
typedef T elementType;

template <class U> Number<T>& operator=(U const& a)
#ifdef INSIDE_INTEFACE_DEFINITION
{
this->value=T(a);
return (*this);
}
#else
;
#endif
T GetValue() const;

private:
elementType value;
};

#ifndef INSIDE_INTEFACE_DEFINITION
template <class T>
template <class U>
Number<T>& Number<T>::operator=(U const& a) {
this->value=T(a);
return (*this);
}
#endif

template <class T> T Number<T>::GetValue() const {
return (this->value);
}

int main() {
Number<float> f;
f=3;
std::printf("%3.2f\n", f.GetValue());
return 0;
}
-----------------------------------------------------------------------
макрос "INSIDE_INTEFACE_DEFINITION" используется для опредиление метода в интерфейсной части, а в отключеном состоянии за пределами.

Интересует, почему регается еомпилятор при отключеном макросе, тоесть при обьявлении метода за пределам интерфейса класса?
Во многих книгах эта тема даже не подымается, а в тех что есть мельком рекомендаци и приметы (я сделал, мне так кажется, именно так) не работают. Компилятор ругается на второй идентификатор "template".

Подскажите, пожалуйста! Меня на худой конец устроит и реализация в интерфейсной части, но все же ... хотелось узнать что это за байда такая!
3
18 октября 2006 года
Green
4.8K / / 20.01.2000
VS2003 всё ок
меняй компилятор

P.S. а вот кросспостинг в форуме преследуется по закону.
9
18 октября 2006 года
Lerkin
3.0K / / 25.03.2003
тест на 2003, 2005, ICL 9.0 - всё ОК. см.Green
12K
19 октября 2006 года
momot
7 / / 23.11.2005
Спасибо! Значит нужно будет еще онду студию поновее поставить 8)
309
19 октября 2006 года
el scorpio
1.1K / / 19.09.2006
Что такое "(U const &a)"? Правильное указание константной ссылки в качестве параметра выглядит так: "(const Type &Name)".
Возможно, именно это и непонимает компилятор...
240
19 октября 2006 года
aks
2.5K / / 14.07.2006
Видимо студия не больше 6-й версии? )
Это один из багов с шаблонными методами за которые я и не люблю ее. Переходите на версию более соответствующую стандарту.
3
19 октября 2006 года
Green
4.8K / / 20.01.2000
[QUOTE=el scorpio]Что такое "(U const &a)"? Правильное указание константной ссылки в качестве параметра выглядит так: "(const Type &Name)".
Возможно, именно это и непонимает компилятор...[/QUOTE]
Не имеет значения
284
19 октября 2006 года
michael_is_98
587 / / 25.02.2005
Интересно, какая из студий ближе к стандарту 2003 или 2005?
И есть ли у кого-нибудь из участников VS2005 версии не ниже Professional?
240
19 октября 2006 года
aks
2.5K / / 14.07.2006
Ну видимо 2005 )) К улучшению же все движется ))
Тем более по даже сравнению с 2003 мной лично обноруженно исправление довольно многих недочетов и несоответсвий языку )
284
19 октября 2006 года
michael_is_98
587 / / 25.02.2005
Может тогда пример приведете, который в 2003 не работает, а в 2005 работает. У меня 2003 стоит...
3
19 октября 2006 года
Green
4.8K / / 20.01.2000
Раскрою секрет волшебного запроса:
"C++ compliance"

Подставляя к этому словосочетанию версии компиляторов, получаем много интересной информации:
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=23760&SiteID=1
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang/html/vclrfStandardComplianceIssuesInVisualC.asp
http://support.microsoft.com/default.aspx?scid=KB;en-us;q243451

и т.п.
284
19 октября 2006 года
michael_is_98
587 / / 25.02.2005
Это интересно. Может среди вас есть люди которые работают с gcc? Слышал, что этот компилятор более стабилен и уже давно соответствует стандарту. Или я не прав?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог