Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
 |  |  |
[C++] template 30.03.03 17:14 Число просмотров: 1164
Автор: dl <Dmitry Leonov>
|
> Спасибо, утешил. > Перехожу на VS.NET. > Кстати, он поддерживает и инстанирование шаблона шаблоном. > Но вот не до сих пор поддерживает частичную спецификацию > шаблона. :о(
бета 2003 уже поддерживает.
In the Visual C++ .NET 2003 release, the conformance of the Visual C++ compiler was significantly improved in the following areas:
Defining Member Templates Outside a Class
Compiler Correctly Disambiguates Complex Expressions or Types
Default Initialization of Scalar Types
Templated User Defined Conversions
Universal Character Names
Operator that is Pointer to Function
Support Aggregate Initialization
References Supported as Nontype Template Parameters
Argument Dependent Name (AKA Koenig) Lookup on Functions
Partial Ordering of Function Templates
Partial Specialization of Class Templates
Unicode Support
|
<programming>
|
[C++] template 29.03.03 23:58
Автор: Green Статус: Незарегистрированный пользователь Отредактировано 30.03.03 00:04 Количество правок: 2
|
Есть такой код:
#include <iostream>
using namespace std;
template <class T>
void get() {
cout << 2;
}
template<>
void get<char>() {
cout << 5;
}
template<>
void get<int>() {
cout << 4;
}
int main() {
get<char>();
get<int>();
get<double>();
return 0;
}
Предполагалось, что на экран выведется:
5
4
2
Но в реальности выводиться:
5
5
5
При этом, если поменять местами частные спецификации для char и int, т.е. записать:
template <class T>
void get() {
cout << 2;
}
template<> // местоположение
void get<int>() { // в коде изменено
cout << 4; //
}
template<> // местоположение
void get<char>() { // в коде изменено
cout << 5; //
}
int main() {
get<char>();
get<int>();
get<double>();
return 0;
}
то будет выводиться уже:
4
4
4
ПОЧЕМУ? Почему не работает, как предполагалось?
P.S. Компилятор из VS6.0
|
 |
[C++] template 30.03.03 06:24
Автор: dl <Dmitry Leonov>
|
> ПОЧЕМУ? Почему не работает, как предполагалось? > P.S. Компилятор из VS6.0
Скорее всего, это просто ошибка компилятора, при выборе реализации шаблона происходит некорректное преобразование типа и берется первая частная спецификация, удовлетворяющая этому преобразованию (преобразование char к int еще можно было бы простить, но не наоборот, и уж точно не double к char). В утешение могу сказать, что компилятор от VS.NET 2003 генерит код, выводящий, как и положено, 542.
|
 |  |
[C++] template 30.03.03 13:18
Автор: Green Статус: Незарегистрированный пользователь
|
> > ПОЧЕМУ? Почему не работает, как предполагалось? > > P.S. Компилятор из VS6.0 > > Скорее всего, это просто ошибка компилятора, при выборе > реализации шаблона происходит некорректное преобразование > типа и берется первая частная спецификация, удовлетворяющая > этому преобразованию (преобразование char к int еще можно > было бы простить, но не наоборот, и уж точно не double к > char). В утешение могу сказать, что компилятор от VS.NET > 2003 генерит код, выводящий, как и положено, 542.
Спасибо, утешил.
Перехожу на VS.NET.
Кстати, он поддерживает и инстанирование шаблона шаблоном.
Но вот не до сих пор поддерживает частичную спецификацию шаблона. :о(
|
 |  |  |
[C++] template 30.03.03 17:14
Автор: dl <Dmitry Leonov>
|
> Спасибо, утешил. > Перехожу на VS.NET. > Кстати, он поддерживает и инстанирование шаблона шаблоном. > Но вот не до сих пор поддерживает частичную спецификацию > шаблона. :о(
бета 2003 уже поддерживает.
In the Visual C++ .NET 2003 release, the conformance of the Visual C++ compiler was significantly improved in the following areas:
Defining Member Templates Outside a Class
Compiler Correctly Disambiguates Complex Expressions or Types
Default Initialization of Scalar Types
Templated User Defined Conversions
Universal Character Names
Operator that is Pointer to Function
Support Aggregate Initialization
References Supported as Nontype Template Parameters
Argument Dependent Name (AKA Koenig) Lookup on Functions
Partial Ordering of Function Templates
Partial Specialization of Class Templates
Unicode Support
|
|
|