2013-02-17 77 views
1

我想模板一个类的属性,但不是所有的功能。C++ - 如何模板类属性,而不是类的功能?

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 ​​

+0

为什么向下票?诚然,它可以变得更清楚,但仍然是别人可以从中受益的问题。 – StoryTeller 2013-02-17 10:12:15

回答

1

如果你需要一个模板数据成员,那么你类有是一个类模板:

enum myenum { .... }; 

template <typename T> 
class myclass { 
public: 
    myenum gettype() const; 
    myclass& operator+=(const myclass& rhs); 
private: 
    T value_; 
}; 
+0

没有一个枚举类型,我没有写在这里,但我需要它被模板化,实际上知道类型,我会添加枚举到我的文章。 – Elfayer 2013-02-17 10:27:20

+0

@Elfayer以及与模板相关的'enum'如何?你想有许多不同的枚举类型? – juanchopanza 2013-02-17 10:45:13

+0

这只是一个例子。我不想模板全班,因为我不想模板班的所有功能。但我不知道该怎么做,因为我有一个模板化的属性,需要该类被模板化。或者我不知道该怎么做,所以我问。 – Elfayer 2013-02-17 10:49:19

1

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

template<typename T> 
T getType(); 


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

如果你想在模板成员在你的班级,你必须让班级本身成为一个模板。真的没有其他办法。

+0

我编辑了帖子。 – Elfayer 2013-02-17 10:16:40