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

标签 c++ generics

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

class Myclass {
public:
    unsigned long long var1;
    unsigned short var2;
    signed short var3; 
}

现在我在 SomeOtherClass 中有一个 Myclass 的全局对象,一个方法说:

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

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

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

谢谢

最佳答案

通过指针传递参数:

void SomeOtherClass::updateMyClassValue(int paramType, void* pValue) {
 switch(paramType) {
     case1:
      objMyClass.var1 = *(unsigned long long*)pValue;
     case2:
      objMyClass.var2 = *(unsigned short)pValue;
     case3:
      objMyClass.var3 = *(signed short)pValue;
 }

这当然不是类型安全的,当您不小心指定了错误的 paramType 时,您会遇到很多麻烦。如果您改为使用成员模板函数,则可以让编译器为您做一些检查,例如:

template<type T>
void SomeOtherClass::updateMyClassValue<short int>(T value) {
    objMyClass.var2 = value;
}

更优雅且类型安全。

关于c++ - 在 C++ 方法中将泛型类型作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31177119/

相关文章:

java - 这是java泛型吗?这怎么可能工作?

c# - 泛型方法之间的模糊引用

c++ - Bison 的错误 : request for member ‘charTokens’ in something not a structure or union

java - 泛型类型 java.util.List 继承

c++ - 如何加快计算最长公共(public)子串的长度?

c++ - OpenGL 是否仅针对 vSync fps 更新屏幕?

c# - 如何从继承自 CollectionBase 的类重构为泛型?

带有泛型的 Swift 枚举值

c++ - 读取悖论时间戳字段

c++ - 多重或虚拟继承下的类的内存布局和vtable(s)?