使用模板进行条件函数调用

use*_*954 2 c++ template-meta-programming c++11

有没有办法使用c ++模板(编译时代码生成)有条件地调用函数,其中基于参数的类型,每个变量的逻辑将是不同的

例如(不是可编译的代码),

template <true, typename Var1, typename Var2, typename Var3>
int func(Var1 v1, Var2 v2, Var3 v3) {//logic type1}

template <false, typename Var1, typename Var2, typename Var3>
int func(Var1 v1, Var2 v2, Var3 v3) {//logic type2}

template <typename Var1, typename Var2, typename Var3>
int foo(Var1 v1, Var2 v2, Var3 v3)
{
    func<static_condition>(v1, v2, v3);
}
Run Code Online (Sandbox Code Playgroud)

当用一些参数调用foo时,它将静态地评估boolean标志,根据它应该调用func.在这两种变体中执行的逻辑将导致编译错误,因此必须为每个操作拆分它.

我正在寻找一些例子并发现_If _Then _Else模式使用模板元编程,但我不清楚如何在我的场景中使用它.

Ser*_*eyA 10

没有比这更容易了.

template <typename Var1, typename Var2, typename Var3>
int func(Var1 v1, Var2 v2, Var3 v3, std::true_type) {//logic type1}

template <typename Var1, typename Var2, typename Var3>
int func(Var1 v1, Var2 v2, Var3 v3, std::false_type) {//logic type2}

template <typename Var1, typename Var2, typename Var3>
int foo(Var1 v1, Var2 v2, Var3 v3)
{
    func(v1, v2, v3, std::integral_constant<bool, static_condition>());
}
Run Code Online (Sandbox Code Playgroud)

  • itym`std :: integral_constant <bool,static_condition> {}` (3认同)