Читаю "язык программирования С++" Прата С. Там есть пример с перегрузкой ф-ии swap. Точнее говоря, с перегрузкой шаблона, обыной ф-ии и специализации. Решил опробовать пример, когда специализация "перекрывает" шаблон. вот код:
#include <iostream>
using namespace std;
template <> void func__ <int&> (int &x, int &y) //спец-функция
{
cout << "i am a spetialization func with arguments (int &x, int &y)";
}
template <type> void func__ (type &x, type &y) //шаблон
{
cout << "i am a template func with arguments (type &x, type &y)";
}
int main ()
{
int a, b;
func__ (a, b);
}
Все время сталкиваюсь с ошибкой компилятора (в строке, где я объявляю специализацию) : expected initializer before '<' token;
Про какую инициализацию он говорит? Я уже и пробовал и < > убирать и вставлять их в разных частях объявления - нарывался только на новые ошибки. Может моя ошибка где-то в ситаксисе? инет перерыл по этому вопросу, даже на сайт кодеблокс зашел - ничего не нашел. Помогите пожалуйста правильно написать компилирующуюся специализацию функции в среде codeblocks.
И еще. То, что существует иерархия наложения (специализация перекрывает шаблон, а обычная ф-ия перекрывает и шаблон и специализацию) я понял. Очевидны преимущества шаблона. Но зачем специализации, если можно создать обычную ф-ию?
Другие языки программирования и технологии
не получается создать специализацию (спец ф-ию) в codeblocks 10,05. C++
#include <iostream>
using namespace std;
void func__(int &x, int &y) //спец-функция
{
cout << "i am a spetialization func with arguments (int &x, int &y)";
}
template <class> void func__ (type &x, type &y) //шаблон
{
cout << "i am a template func with arguments (type &x, type &y)";
}
int main ()
{
int a, b;
func__ (a, b);
float x, y;
func__ (x, y);
}
using namespace std;
void func__(int &x, int &y) //спец-функция
{
cout << "i am a spetialization func with arguments (int &x, int &y)";
}
template <class> void func__ (type &x, type &y) //шаблон
{
cout << "i am a template func with arguments (type &x, type &y)";
}
int main ()
{
int a, b;
func__ (a, b);
float x, y;
func__ (x, y);
}
Вот код, который работает:
#include "stdafx.h"
#include < iostream >
using namespace std;
void func__(int &x, int &y) //спец-функция
{
cout < < "i am a spetialization func with arguments (int &x, int &y)" < < endl;
}
template < class type > void func__ (type &x, type &y) //шаблон
{
cout < < "i am a template func with arguments (type &x, type &y)" < < endl;
}
int _tmain(int argc, _TCHAR* argv [ ] )
{
int a, b;
func__ (a, b);
float x, y;
func__ (x, y);
int a1, b1;
func__ (a1, b1);
return 0;
}
Но это еще не специализация. Специализаия изпользует следующий код:
template < > void func__<int>(int &x, int &y) //спец-функция
{
cout < < "i am a REAL spetialization func with arguments (int &x, int &y)" < < endl;
}
Ноэто только в новых компиляторах!
#include "stdafx.h"
#include < iostream >
using namespace std;
void func__(int &x, int &y) //спец-функция
{
cout < < "i am a spetialization func with arguments (int &x, int &y)" < < endl;
}
template < class type > void func__ (type &x, type &y) //шаблон
{
cout < < "i am a template func with arguments (type &x, type &y)" < < endl;
}
int _tmain(int argc, _TCHAR* argv [ ] )
{
int a, b;
func__ (a, b);
float x, y;
func__ (x, y);
int a1, b1;
func__ (a1, b1);
return 0;
}
Но это еще не специализация. Специализаия изпользует следующий код:
template < > void func__<int>(int &x, int &y) //спец-функция
{
cout < < "i am a REAL spetialization func with arguments (int &x, int &y)" < < endl;
}
Ноэто только в новых компиляторах!
Похожие вопросы
- Рекурсия ф-ии
- Здравствуйте, кто нибудь, сможет создать программу через паскаль, вычисляющую произведение цифр 10-х значных чисел?
- Как правильно создать и использовать radiobutton-ы на win api c++ ?Можно ли из программы узнать версию Windows ?
- программно создать объект в C#
- Так какой же язык программирования лучше для ИИ? C, C++, Python? В чем их приемушества и недостатки
- Visual Studio 2010 C++: Как создать оконное приложение?
- visual c++(form project) подскажите где там можно создать и описать свой класс? что то не выходит ((
- Как создать современную 2D игру на языке C#
- Создать список работников предприятия C++
- Как создать программу на языке c++