2010-11-15 3 views
3

можно объявить функцию template в обычном классе с классом шаблона или он должен всегда находиться внутри template class?Шаблоны в C++

+0

Я думаю, что вы имели в виду «шаблон класса». Шаблон класса, такой как 'template struct Foo {};' является своего рода шаблоном, но не своего рода классом. Аналогичным образом, «шаблон функции» является другим типом шаблона, а не функцией. – MSalters

+0

Это должно быть обманом –

ответ

2

мы можем объявить шаблон функции в обычном классе с из шаблонного класса

Да мы можем. Например

class demo 
{ 
    public: 
    template <typename T> 
    void func(const T& x) { 
     //do stuffs 
    } 
}; 

int main() 
{ 
    demo d; 
    d.func<int>(5); 
} 

отлично действует

2

Да, вы можете иметь шаблон функции в не-шаблонных классов тоже, например:

struct X { 
    template<class T> 
    void f(const T& t) { 
     // ... 
    } 
}; 
0

Да, вы можете, но убедитесь, что ваше определение и объявление функции шаблона в заголовочных файлах. Если вы хотите узнать больше, почему это так или больше о шаблонах в целом, я могу порекомендовать вам эту книгу Templates - Complete Guide