我希望能够传递一个整数或双精度型(或字符串)作为模板参数 * 和 * 在某些情况下将结果转换为整数并将其用作类中类型的模板参数。
以下是我尝试过的:
template <typename MPLString>
class A
{
// the following works fine
int fun()
{
// this function should return the int in the boost mpl type passed to it
// (e.g. it might be of the form "123")
return std::stoi(boost::mpl::c_str<MPLString>::value);
}
// the following breaks because std::stoi is not constexpr
std::array<int, std::stoi(boost::mpl::c_str<MPLString>::value)> arr;
};
我试过std::stoi
和atoi
,但都不是constexpr
...有什么想法可以做到这一点(我 * 不能 * 更改模板参数直接接受int
,因为它可能是一个双精度)。
3条答案
按热度按时间insrf1ej1#
使用常规的C字符串定义
constexpr stoi
并不太难。它可以定义如下:抛出表达式在常量表达式中使用时无效,因此它将触发编译时错误,而不是实际抛出。
dxxyhpgq2#
mystoi():
main():
trnvg8h33#
如果你知道字符串的长度,你可以像这样使用预处理器:
你只需要继续这个模式,你需要多少个字符。