我有一个我想包含一些附加功能的 vector :
template <typename T>
class PersistentVector : PersistentObject
{
private:
std::vector<T> values;
public:
virtual void read();
现在,如果必须知道类型名 T,我将如何在类外定义 read()?
第一次尝试:
void PersistentVector::read()
{
// How can I get the iterator type?
typedef std::vector<T>::iterator it_type; // vector cannot be resolved
}
第二次尝试:
// error: Member declaration not found
template <typename T>
void PersistentVector::read()
{
typedef std::vector<T>::iterator it_type; // no error
}
最佳答案
您的第二次尝试即将完成。您的语法略有错误,并且缺少 typename
。注意 PersistentVector<T>::
:
template <typename T>
void PersistentVector<T>::read()
{
typedef typename std::vector<T>::iterator it_type; // no error
}
请注意,任何使用它的代码都必须可以访问此定义。通常这意味着它必须在头文件中,或者在头文件中。
或者,您可以将方法定义放在类定义中:
public:
virtual void read()
{
typedef typename std::vector<T>::iterator it_type;
}
关于c++ - 从模板类外部获取类型名 T,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21865999/