请考虑以下代码。我假设通过强类型枚举的类型指定我可以使用它传递给相同类型的函数和模板,因为指定的基础类型是相同的;尽管编译器会抱怨缺少类型转换。在下面的代码中删除关键字class
和枚举Test::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;
}
是的,这基本上是我最终做的。感谢您的解释 – bjackfly