常数函数参数的专业化

时间:2018-07-16 15:33:21

标签: c++ templates

我想定义一个函数void f(int i),该函数仅在被称为f(1)时才能编译并执行某些操作,而在所有其他情况下都会导致编译错误。可以使用模板专门化吗?

1 个答案:

答案 0 :(得分:0)

正如您在评论中提到的那样,您不希望使用模板,并且根据那里提到的要求,一个选项可能使用enum作为参数,这意味着您将输入限制为给定参数集:

enum argument{option1,option2,option3};

void f(argument x){
  // do stuff
}

(该示例使用了三个允许的值,但是您可以使用任意数量的可能值)

虽然与您要求的不完全相同(f的签名已更改),但它基本上具有相同的目的。

您现在可以使用foption1option2作为输入(或您在option3中指定的任何其他输入)来调用argument。由于enum可隐式转换为int,因此您可以在函数主体中使用它,并直接在argument中指定可能的值

enum argument{option1=20,option2=23,option3=12};

请注意,即使可以将arguments隐式转换为int,它也无法正常工作,因此您将无法直接在{{1 }}输入,这就是为什么它与您要求的不完全相同的原因。

请注意,尽管您可以使用fint转换为static_cast,但这很危险,因为它将再次编译任何输入,甚至可能根据值调用UB。你投。