gpt4 book ai didi

c++ - 如何将 std::dec/hex/oct 放入查找数组

转载 作者:行者123 更新时间:2023-11-28 04:00:07 25 4
gpt4 key购买 nike

我有这个通用字符串到数字的转换:

    enum STRING_BASE : signed int {
BINARY = -1,
OCTAL = 0,
DECIMAL = 1,
HEX = 2,
};
template <class Class>
static bool fromString(Class& t, const std::string& str, STRING_BASE base = DECIMAL) {
if (base == BINARY) {
t = (std::bitset<(sizeof(unsigned long)*8)>(str)).to_ulong();
return true;
}
std::istringstream iss(str);
std::ios_base& (*f)(std::ios_base&); /// have no idea how to turn this into a look-up array
switch (base) {
case OCTAL: f = std::oct; break;
case DECIMAL: f = std::dec; break;
case HEX: f = std::hex; break;
}
return !(iss >> f >> t).fail();
};

我想将 switch 案例变成一个很好的查找数组,大致如下:

    std::ios_base arr[2] = {std::oct, std::dec, std::hex};
return !(iss >> arr[(int)base] >> t).fail();

这会产生:*error C2440: 'initializing' : cannot convert from 'std::ios_base &(__cdecl )(std::ios_base &)' to 'std::ios_base'/p>

这也行不通:

std::ios_base& arr[2] = {std::oct, std::dec, std::hex};

我得到:错误 C2234:“arr”:引用数组是非法的

那么,这个问题有什么解决办法吗?

最佳答案

尝试:

std::ios_base& (*arr[])( std::ios_base& ) = { std::oct, std::dec, std::hex };

或者用 typedef 作为函数指针:

typedef std::ios_base& (*ios_base_setter)( std::ios_base& );

ios_base_setter arr[] = { std::oct, std::dec, std::hex };

您可以省略数组大小,它将根据初始化器的数量确定。我注意到这一点是因为您指定了一个大小为 2 的数组,但提供了 3 个初始值设定项。

关于c++ - 如何将 std::dec/hex/oct 放入查找数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1248506/

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