非模板类中的函数模板

时间:2009-11-25 19:36:26

标签: c++ function templates

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

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)
{
}

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

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

1 个答案:

答案 0 :(得分:12)

不要将<T>放在函数名后面。这应该有效:

template<class T>
void Stack_T::put(const T& obj)
{
}

如果函数定义不在头文件中,则仍然无效。要解决此问题,请使用以下方法之一:

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