gpt4 book ai didi

c++ - 不是编译时间常数

转载 作者:太空宇宙 更新时间:2023-11-04 11:45:42 24 4
gpt4 key购买 nike

我有:

    static const std::array<std::pair<ServerD, unsigned int>, 4> dataSizes =
{ std::make_pair(ServerD::ContentType, 1)
, std::make_pair(ServerD::RemoteAddress, 2)
, std::make_pair(ServerD::RemoteUser, 3)
, std::make_pair(ServerD::Url, 4)
};

template <unsigned int Index>
struct SizeFinder {
static const unsigned int SizeFor(ServerD data) {
return (dataSizes[Index].first == data) ? dataSizes[Index].second :
SizeFinder<Index - 1>::SizeFor(data);
}
};

template <>
struct SizeFinder<0> {
static const unsigned int SizeFor(ServerD data) {
return (dataSizes[0].first == data) ? dataSizes[0].second :
0;
}
};

为什么这不是编译时间常量:

char tst[SizeFinder<4>::SizeFor(serverD)]

//错误 1 ​​error C2975: 'BufferSize' : 'isapi::`anonymous-namespace'::GetVariableFor' 的模板参数无效,预期的编译时常量 表达式

我必须在没有 constexpr 的情况下完成这项工作。 VS2013还是没有这个。

编辑 由于静态常量函数似乎无法在编译时计算,是否有 C++ 03 的解决方法?

最佳答案

看起来您只需要一个从ServerDunsigned int 的编译时映射。为什么不将它嵌入到枚举值中:

enum class ServerD : unsigned int {
ContentType = 1U,
RemoteAddress = 2U,
RemoteUser = 3U,
Url = 4U
};

char tst[ServerD::Url];

关于c++ - 不是编译时间常数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19940107/

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