gpt4 book ai didi

c++ - 不允许将强类型枚举用作相同基础类型的参数?

转载 作者:行者123 更新时间:2023-11-30 02:34:03 34 4
gpt4 key购买 nike

考虑以下代码。我假设通过指定强类型枚举的类型,我将能够使用它传递给相同类型的函数和模板,因为指定的基础类型是相同的;尽管编译器提示缺少类型转换。在下面的代码中,删除关键字 classTest::TOTAL_ITEMS 枚举上的说明符返回到 TOTAL_ITEMS 将起作用。我知道他们不希望对强类型枚举进行任何类型转换,但是当底层类型与函数或模板预期接收的类型相同时,我希望编译器不会提示这个而不是强制一个特定的类型转换。想法?

#include <iostream>
#include <cstdint>

template <typename T, std::size_t N = 10>
class Y {
public:
Y() : z_() {
}
~Y() = default;

private:
T z_[N];
};

class X {
public:
enum class Test : std::size_t {
ITEM1 = 0,
ITEM2,
TOTAL_ITEMS,
};

private:
Y<int, Test::TOTAL_ITEMS> collection;
};

int main() {
X xx;
}

最佳答案

作用域枚举的全部目的是防止隐式转换为基础类型。您需要对其进行强制转换才能编译代码

#include <type_traits>
Y<int, static_cast<std::underlying_type<Test>::type>(Test::TOTAL_ITEMS)> collection;

或者,如果您只关心为您的枚举指定一个底层类型,那么从它的定义中删除 class 关键字,您的代码将按原样编译。

enum Test : std::size_t {
// ...
};

关于c++ - 不允许将强类型枚举用作相同基础类型的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34905741/

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