我正在尝试实现一个 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/