面试题答案
一键面试在C++中,枚举类型具有类型安全特性,这意味着不同枚举类型的值不能隐式转换。我们可以利用这一特性来实现类型安全的模板参数。
以下是一个示例,展示如何编写一个模板函数,接受一个枚举类型作为模板参数,并利用枚举的类型安全特性进行编译期的类型检查和处理:
// 定义一个枚举类型
enum class Color {
RED,
GREEN,
BLUE
};
// 模板函数,接受枚举类型作为模板参数
template <Color color>
void printColor() {
if constexpr (color == Color::RED) {
std::cout << "The color is red" << std::endl;
} else if constexpr (color == Color::GREEN) {
std::cout << "The color is green" << std::endl;
} else if constexpr (color == Color::BLUE) {
std::cout << "The color is blue" << std::endl;
}
}
int main() {
printColor<Color::RED>();
printColor<Color::GREEN>();
printColor<Color::BLUE>();
// 以下代码会导致编译错误,因为类型不匹配
// printColor<1>();
return 0;
}
在上述代码中:
- 首先定义了一个强类型枚举
Color
。 - 然后定义了一个模板函数
printColor
,它接受一个Color
枚举类型作为模板参数。 - 在函数体中,使用
if constexpr
进行编译期条件判断,根据不同的枚举值输出相应的信息。 - 在
main
函数中,调用printColor
函数并传入不同的枚举值。如果尝试传入非Color
枚举类型的值(如printColor<1>();
),编译器会报错,从而体现了枚举类型的类型安全特性在模板参数中的应用。