在 C++ 方法中传递泛型类型作为参数

Kap*_*isa 6 c++ generics

我正在尝试实现一个 C++ 方法,并希望在其中传递一个泛型参数。我只想将该参数分配给对象的属性。这是一个例子:

class Myclass {
public:
    unsigned long long var1;
    unsigned short var2;
    signed short var3; 
}
Run Code Online (Sandbox Code Playgroud)

现在我在 SomeOtherClass 中有一个 Myclass 的全局对象,并且方法如下:

void SomeOtherClass::updateMyClassValue(int paramType, <Generic> value) {
     switch(paramType) {
         case1:
          objMyClass.var1 = value;
         case2:
          objMyClass.var2 = value;
         case3:
          objMyClass.var3 = value;
     }
} 
Run Code Online (Sandbox Code Playgroud)

如何传递这样的类型,因为如果我使用固定类型(例如unsigned long long作为参数类型),我将无法将其分配给 var2 和 var3。我也不想丢失数据,例如签名数据可能具有-ve 值。

请帮助我克服这种情况,我没有 C++ 工作经验。我不确定是否可以在 C++ 中使用 templatete<> 来实现这一点,如果可以,那么如何实现?

谢谢

Rax*_*van 1

一种方法是通过函数重载:

template <class T>
void updateMyClassValue(T value) {
    //assert, or log message, or nothing, if not needed you can remove this function
}

void updateMyClassValue(unsigned long long value) {
    var1 = value;
}

void updateMyClassValue(unsigned short value) {
    var2 = value;
}

void updateMyClassValue(signed short value) {
    var3 = value;
}
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用类似boost::any 的类型。

  • 最好不要模板重载,并且出现编译错误 (2认同)