事情就这样了:我想创建一个void函数,该函数将接收两种众所周知的值类型,而另一种可能是任何值。代码如下:
void change_settings(string element, short setting, ??? value) {
switch (setting) {
case ST_NAME:
// Cast value to string or char* and change element.name
break;
case ST_AMOUNT:
// Cast value to integer and change element.amount
break;
case ST_ENABLED:
// Cast value to boolean and change element.enabled
break;
}
}
我尝试将值的类型设置为
const void*
,但出现错误(cast from ‘const void*’ to ‘short int’ loses precision
),因为我只是这样做了:short name = (short)value
,它必须是一些疯狂的绝望尝试,希望能得到幸运。现在,我不知道是否有办法做到这一点,传递任何类型的变量的指针,然后将其转换为它的值(我知道每种情况下期望的变量类型。我该怎么做?谢谢!
最佳答案
由于您似乎已经预先知道了value
的所有可能类型,并且您希望根据类型来选择不同的行为,因此可以编写一系列函数重载:
void change_settings(const std::string& element, short setting, const std::string& value);
void change_settings(const std::string& element, short setting, int value);
void change_settings(const std::string& element, short setting, bool value);
这样就无需运行时切换。