常量函数参数的专业化
Specialization for a constant function argument
我想定义一个函数void f(int i)
,它只会在被调用为f(1)
时进行编译和执行某些操作,并且在所有其他情况下都会导致编译错误。是否可以使用模板专业化?
正如您在评论中提到的,您不希望使用模板,并且根据您在其中提到的要求,一个选项可能使用enum
作为参数,这意味着您将输入限制为给定的参数集:
enum argument{option1,option2,option3};
void f(argument x){
// do stuff
}
(示例使用三个允许的值,但您可以使用任何数量的可能值(
虽然不是你想要的(f
的签名发生了变化(,但它基本上起到了同样的作用。
现在,您可以使用option1
、option2
或option3
作为输入(或在argument
中指定的任何其他输入(来调用f
。由于enum
可以隐式转换为int
,因此您可以在函数体中使用它,并直接在argument
中指定可能的值
enum argument{option1=20,option2=23,option3=12};
请注意,即使arguments
可以隐式转换为int
,但它不能以相反的方式工作,因此您将无法在int
输入上直接调用f
,这就是为什么它不完全符合您的要求。
请注意,虽然您可以使用static_cast
将int
转换为argument
,但这是危险的,因为这将再次编译任何输入,甚至可能根据您转换的值调用UB。
相关文章:
- 如何使用默认参数等选择模板专业化
- 我可以用clang AST从模板专业化中获得默认的模板参数吗
- 带有默认参数的模板专业化
- 还有另一个类模板专业化(在布尔参数上)
- 常量函数参数的专业化
- 嵌套模板类的模板类模板模板参数的专业化
- 遍历模板参数包,没有争论的专业化的作用是什么?
- 继承专业化的模板参数推导
- 如何部分专业化功能以用元组元素作为参数调用功能
- 具有变异模板模板参数的方法的部分专业化
- 功能模板参数包,然后是模板参数和专业化
- 在允许的函数模板的明确专业化中扣除了多个模板参数
- C 中的模板专业化中的字符串参数
- 模板参数的模板专业化
- 对于类型是类模板专业化的参数,ADL背后的理由是什么
- 为什么我们不能在模板专业化的开始/中间使用可变参数模板(以及如何模拟)?
- 操作员与整数模板参数专业化过载
- 错误:类模板部分专业化包含无法推导的模板参数
- C - 具有非类型模板参数的模板类上的专业化函数模板
- 带有模板参数的模板专业化