2015-11-23 2 views
0

Noobie программист здесь, просто изучая шаблоны классов для C++.Template Class functions

В моем текущем проекте мне требуется создать класс шаблона, который может принимать значения ints, double или string в качестве параметров.

До сих пор, каждый раз, когда я создал реализацию функций класса, я должен сделать 3 каждой функции (по одному для каждого типа параметра).

Вопрос в том, реализует ли конкретная функция класса точно то же самое независимо от типа параметра, есть ли способ написать для него одну реализацию?

Заранее благодарим за ответы на все вопросы!

+1

Да, используя шаблоны ... –

+1

Это основная причина существования шаблона. См. Http://en.cppreference.com/w/cpp/algorithm/max. –

+0

Я закрыл как обман, так как стало ясно из комментариев, что в реальной проблеме возникали ошибки компоновщика при попытке отделить реализацию от интерфейса. – molbdnilo

ответ

0

Этот вопрос немного неясен - сначала вы говорите, что шаблон шаблона принимает разные параметры, но тогда это звучит так, как будто ваши функции-члены принимают эти разные параметры.

Если ваш класс шаблон выглядит

template<typename T> 
class X 
{ 
public: 
    X(const T& t) : m_t(t) {} 
    void print(); 
private: 
    T m_t; 
}; 

Ваше осуществление print может выглядеть следующим образом:

template<typename T> 
void X<T>::print() 
{ 
    std::cout << m_t; 
} 

Функция-член может также быть шаблоном:

template<typename T> 
class X 
{ 
public: 
    X(const T& t) : m_t(t) {} 

    template<typename U> 
    void printBefore(const U& u); 
private: 
    T m_t; 
}; 

определение шаблона функции в шаблоне класса выглядит следующим образом:

template<typename T> 
template<typename U> 
void X<T>::printBefore(const U& u) 
{ 
    std::cout << m_t << u; 
} 
+0

извините, если мой вопрос неясен. Моя проблема в основном связана с ошибками компоновщика, когда я пытаюсь отделить реализацию от интерфейса класса шаблона. Я даже пробовал это так, как вы написали его в ответ, но все же ошибку компоновщика. – user5540318

+0

@ user5540318 См. Http://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-file. – Quentin

+0

@ user5540318 Почему вы не спросили о своей реальной проблеме? Я собираюсь закрыть этот вопрос как дубликат. – molbdnilo