非模板类中的函数模板

The*_* do 14 c++ templates function

我确信这是可能的,但我不能这样做,这是:我如何在非模板类中定义函数模板?我尝试过这样的事情:

class Stack_T
{
    private:
        void* _my_area;
        static const int _num_of_objects = 10;

    public:
        // Allocates space for objects added to stack
        explicit Stack_T(size_t);
        virtual ~Stack_T(void);

        // Puts object onto stack
        template<class T>
        void put(const T&);

        // Gets last added object to the stack
        template<class T>
        T& get()const;

        // Removes last added object from the stack
        template<class T>
        void remove(const T&);
};

template<class T> //SOMETHING WRONG WITH THIS DEFINITION
void Stack_T::put<T>(const T& obj)
{
}
Run Code Online (Sandbox Code Playgroud)

但它不起作用.我得到这个错误的消息:

'错误1错误C2768:'Stack_T :: put':非法使用显式模板参数'
谢谢

int*_*jay 14

不要把<T>后面的函数名称.这应该工作:

template<class T>
void Stack_T::put(const T& obj)
{
}
Run Code Online (Sandbox Code Playgroud)

如果函数定义不在头文件中,这仍然不起作用.要解决此问题,请使用以下方法之一

  • 将函数定义放在头文件中,在类中.
  • 将函数定义放在类之后的头文件中(如示例代码中所示).
  • 在头文件中使用显式模板实例化.这有严重的局限性(你必须提前知道T的所有可能值).