我有一个(类似容器的)类,它接受其他几个类型/类作为数据成员。现在,我想将数据类型的一些属性(编辑:正整数)指定为编译时信息。这很好,但是我希望static_assert提供的类型是正确的(uint8_t),对于大多数数据类型类,实际值是不同的。我将数字设置为带有std::integral_constant的uint8_t。
1)如何做到这一点(见提供的示例代码)?
2)是否有更好的办法?
我可以在c++17之前使用语言特性。
(编辑以澄清)
class DataClass
{
public:
// compile time information about char count
using char_count = std::integral_constant<uint8_t, 2>;
private:
...
}
class DataClass2
{
public:
// compile time information about char count
using char_count = std::integral_constant<uint8_t, 4>;
private:
...
}
template <typename DataType, ...>
class ContainerClass
{
private:
// does not work: error C2923: 'std::is_same_v':
// 'value' is not a valid template type argument for parameter '<unnamed-symbol>'
static_assert(std::is_same_v<DataType::char_count::value, uint8_t>, "not uint8_t");
// this also does not work
static_assert(std::is_same_v<decltype(DataType::char_count::value), uint8_t>, "also not uint8_t");
// using the value actually works fine
constexpr static auto char_count = DataType::char_count::value;
public:
...
}发布于 2020-06-01 09:22:19
你想做什么取决于你到底想检查什么。
static_assert(DataType::char_count::value == 2, "char_count is not 2!");
char_count是否有值2?char_count来检查char_count是一个积分常量(或其他的东西),它具有uint8_t作为type成员类型的别名?static_assert(std::is_same_v(typename DataType::char_count::value_type, "char_count is not uint8_t!");
char_count是值为2的整数常量,并键入uint8_t?static_assert(std::is_same_v<DataType::char_count, std::integral_constant<uint8_t, 2>>, "char_count is not 2 or not uint8_t!");。
https://stackoverflow.com/questions/62128313
复制相似问题