實現我有一個可以一般持有任何(原語)一類類型:泛型類型的容器使用模板
class Value
{
private:
int i_value;
unsigned int ui_value;
long l_value;
unsigned long ul_value;
short s_value;
float f_value;
double d_value;
char c_value;
bool b_value;
std::string str_value;
int type;
void setValue(int value);
void setValue(unsigned int value);
void setValue(long value);
void setValue(unsigned long value);
void setValue(short value);
void setValue(float value);
void setValue(double value);
void setValue(char value);
void setValue(bool value);
void setValue(std::string value);
public:
Value(int value);
Value(unsigned int value);
Value(long value);
Value(unsigned long value);
Value(short value);
Value(float value);
Value(double value);
Value(char value);
Value(bool value);
Value(std::string value);
Value(Value& other); //Copy Constructor
~Value();
int getType();
std::string toString(int format);
};
這是很好的,因爲我可以這樣做:
Value * v1 = new Value(55);
Value * v2 = new Value(1.2);
Value * v3 = new Value("yes");
Value * v4 = new Value(true);
然而,正如你所看到的,這很醜陋。超重的一切,使其工作。我認爲模板可以使這個通用。但是,據我所知,你總是必須指定類型,這種類型會挫敗課程的全部目的。
例如:
Value<int> * v1 = new Value<int>(55);
Value<double> * v2 = new Value<double>(1.2);
Value<string> * v3 = new Value<string>("yes");
Value<bool> * v4 = new Value<bool>(true);
如果我使用的模板,我不能再這樣做vector<Value *>
我就像之前。這是正確的,還是我錯過了模板的某些方面可以幫助在這種情況下?
如果要使用可能具有不同類型值的向量,則不能使用模板。假設一次只有一個值類型處於活動狀態,則應該使用未使用的類型來查看工會與相同的內存。 – 2014-09-29 16:27:24
請參閱'boost :: any' – matsjoyce 2014-09-29 16:28:24
@matsjoyce或'boost :: variant',瞭解有限的已知類型。 – dyp 2014-09-29 16:31:33