gpt4 book ai didi

c++ - 非模板类中的函数模板

转载 作者:IT老高 更新时间:2023-10-28 23:18:14 24 4
gpt4 key购买 nike

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

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

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

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

最佳答案

不要把 <T>在函数名之后。这应该有效:

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

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

  • 把函数定义放在头文件中,在类里面。
  • 将函数定义放在类之后的头文件中(就像在您的示例代码中一样)。
  • 在头文件中使用显式模板实例化。但这有严重的限制(您必须提前知道 T 的所有可能值)。

关于c++ - 非模板类中的函数模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1799445/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com