我有一个我想包含一些附加功能的 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/

10-11 17:08