c + +发送的任何类型的参数的一个函数(C++ send any type of argument

2019-07-17 20:52发布

这里有云:我希望创建一个将接收值的两个著名的类型,另一种可能是任何一个无效的功能。 该代码会是这样:

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;
    }
}

我tryied使值的类型const void* ,但我得到一个错误( cast from 'const void*' to 'short int' loses precision ),因为我只是做了这一点: short name = (short)value ,它必须是一些疯狂绝望的试验,希望能得到幸运。 现在,我不知道是否有这样做的方式,传递的任何类型的变量,然后将其转换成它是什么指针(我知道变量取决于每种情况下所期望的类型。我会怎么做呢?谢谢!

Answer 1:

因为你似乎事先知道所有潜在类型的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);

这消除了运行时切换的需要。



Answer 2:

您应该使用模板

template <typename T>
void change_settings(string element, short setting, T value);


Answer 3:

假设你正在谈论运行时切换(而不是编译时,在这种情况下,模板是可能的答案):

你可以考虑变体类(如boost::variant ),或者使用多态(即定义的继承层次,和虚函数来实现特定的行为)。



文章来源: C++ send any type of argument to a function