Записки программиста
Авторский блог Михаила Лукина

Мой блог

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


ОБЛАКО ТЕГОВ:


.NET .NET Compact Framework 0xc8000222 Android Android SDK autorun C# C++ CUDA DOM error find JDK Gamedev Linux lock-free алгоритмы OpenCL ostringstream Unity vector Vusual Studio Windows Windows 7 XML XmlDocument массивы обновления обновления Windows Отключение autorun ошибка 0xc8000222 Параллельное программирование

Все теги


« Что делать, если в Windows 7 не работает центр обновлений и выдает ошибку 0xc8000222  | В начало |  Как преобразовать строку в шестнадцатеричное число int64 »


Специализация функции-члена шаблонного класса

16.05.12 15:09

Сегодня рассмотрим специализацию шаблонов.


Создадим класс шаблонный A.


#include <string>
#include <iostream>

template <class T>
class A
{
private:
std::string f;
public:
void method();
};

template<class T>
void A<T>::method()
{
   f = "some type";
   std::cout << f << std::endl;
}


Теперь создадим специализацию для int:


template<>
class A<int>
{
private:
  std::string f;
public:
  void method();
};


Если мы омределим method следующим образом:


template <>
void A<int>::method()
{
  f = "int";
  std::cout << f << std::endl;
}
,

то получим ошибку о том, что метод нельзя спицифицировать дважды. В Visual Studio это ошибка №C2910. MSDN говорит, что требуется убрать template <> . Однако в полученном коде:
void A<int>::method()
{
  f = "int";
  std::cout << f << std::endl;
}
 

возникает ошибка линковки - функция-флен method определена дважды в объектном файле.


Работающий вариант:
inline void A<int>::method()
{
  f = "int";
  std::cout << f << std::endl;
}




Рубрики: C++

« Что делать, если в Windows 7 не работает центр обновлений и выдает ошибку 0xc8000222  | В начало |  Как преобразовать строку в шестнадцатеричное число int64 »



© 2010-2014. Записки программиста. Все права защищены.
Яндекс.Метрика
ВебСтолица.РУ: создай свой бесплатный сайт!  | Пожаловаться  
Движок: Amiro CMS