ali*_*ali 9 c++ types arguments function void
这就是:我想创建一个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;
}
}
Run Code Online (Sandbox Code Playgroud)
我试图制作值的类型,const void*但我得到一个错误(cast from ‘const void*’ to ‘short int’ loses precision),因为我只是这样做:short name = (short)value,这必须是一些疯狂的绝望审判,希望能够幸运.现在,我不知道是否有办法做到这一点,传递任何类型的变量的指针然后将其转换为它是什么(我知道根据每种情况的变量类型.我将如何做到这一点?谢谢!
Cae*_*sar 13
你应该使用模板
template <typename T>
void change_settings(string element, short setting, T value);
Run Code Online (Sandbox Code Playgroud)
由于您似乎事先知道所有可能的类型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);
Run Code Online (Sandbox Code Playgroud)
这消除了对运行时切换的需要.
假设您正在谈论运行时切换(与编译时相反,在这种情况下,模板可能就是答案):
您可以考虑变体类(例如boost::variant),或者可能使用多态(即定义继承层次结构,以及虚函数来实现特定行为).
| 归档时间: |
|
| 查看次数: |
8765 次 |
| 最近记录: |