【发布时间】:2014-09-29 16:22:50
【问题描述】:
我有一个通常可以容纳任何(原始)类型的类:
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 *> 这样的事情了。这是正确的,还是我错过了可以在这种情况下提供帮助的模板的某些方面?
【问题讨论】:
-
如果你想使用一个可能有不同类型的值的向量,你不能使用模板。假设一次只有一种值类型处于活动状态,您应该查看与未使用类型相同的内存的联合。
-
@matsjoyce 或
boost::variant,用于有限的已知类型集。
标签: c++ templates containers