gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:44:03 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com