2

我想模板化一个类的属性,但不是所有的功能。

enum myEnum
{
CHAR,
INT,
FLOAT,
DOUBLE
};

class   myClass
{
public:
  myClass(T);
  ~myClass();
  myEnum getType(); // need to template it to know the type
  myClass *operator+(const myClass&);
   /*
I don't want to template it, because I don't need it,
I can find the type tanks to getType() (for the precision of the operation,
I'll need it, ie. for a char + int)
*/
protected:
  T _value;
  std::string _sValue;
};

我知道如何在一个类中模板化一个独特的函数,我只需要template<typename T>在类中的函数上面写。我想知道如何在T _value不模板化所有类的情况下模板化属性。

如果我尝试对属性做同样的事情,我的意思是:

template<typename T>
T _value;

我有那个错误: error: data member '_value' cannot be a member template error: ‘myClass’ is not a template

4

2 回答 2

1

你的问题很不清楚你想要什么,但我猜它可能是这样的:

template<typename T>
T getType();


template<typename T>
T myClass::getType()
{
   T t;
   return t;
}

如果你想在你的类中有一个模板化的成员,你必须使类本身成为一个模板。真的没有别的办法了。

于 2013-02-17T10:12:26.737 回答
1

如果您需要模板数据成员,那么您的类必须是类模板:

enum myenum { .... };

template <typename T>
class myclass {
 public:
  myenum gettype() const;
  myclass& operator+=(const myclass& rhs);
 private:
  T value_;
};
于 2013-02-17T10:16:52.913 回答