如何为所有类型的整数值类型创建全局类型并在C ++中知道它们的类型

时间:2015-12-03 11:45:08

标签: c++

我喜欢将引用变量从任何整数(float,int,double ..)获取的函数作为自定义类型。此类型应该知道它是从哪个类型构造的。例如,假设我构建自定义类型

class Variable
{
   public:
      Variable(int &v)
      Variable(float &v)
      Variable(double &v)
      Variable(short &v)

      void setNuwValue(int &v)
      void setNuwValue(float &v)
      void setNuwValue(double &v)
      void setNuwValue(short &v)

       var_type_enum getType();
};

现在在我的应用程序中,我有一个函数,它将此Variable类型作为参数

void modifyVar(Variable& var)
{
   //1.how to know the var type it can return enum of types or string what ever ..
    var_type_enum type  = var.getType();
    var.setNuwValue(3);  
}

正如您所看到的,这只是伪代码而没有实现,我不知道如何实现,我需要帮助。 简而言之,我希望能够实现全局类型var,例如javascript" var"输入

2 个答案:

答案 0 :(得分:2)

试试这个:

enum VT
{
  VT_int,
  VT_float,
  VT_double,
  VT_short
}

class Variable
{

  int i;
  float f;
  double d;
  short s;

  VT type;
public:
  Variable() : i(0), f(0), d(0), s(0) {}
  Variable(int &v) { i = v; type = VT_int; }
  Variable(float &v) { f = v; type = VT_float; }
  Variable(double &v) { d = v; type = VT_double; }
  Variable(short &v) { s = v; type = VT_short; }

  void setNuwValue(int &v) { i = v; type = VT_int; }
  void setNuwValue(float &v) { f = v; type = VT_float; }
  void setNuwValue(double &v) { d = v; type = VT_double; }
  void setNuwValue(short &v) { s = v; type = VT_short; }

  VT getType() const { return type; }
};

答案 1 :(得分:0)

您可以使用如下所示的模板。

template<typename T> class Variable
{
public:

    const char* getType()
    {
        return typeid(T).name();
    }
    void setNuwValue( const T& ValueIn )
    {
        m_Value = ValueIn;
    }

private:

    T m_Value;
};

template<typename T>
void modifyVar(Variable<T>& var)
{
    const char* type = var.getType();
    var.setNuwValue(3);  
}

下面的示例调用将在调用getType()时返回“double”。

Variable<double>Var;
modifyVar( Var );