C++:如何分支模板函数?

标签 c++ templates

我想做这样的事情......

class A;
class B;
class C;

void a(A);
void b(B);
void c(C);

template<typename T> void f(T t)
{
  if (some condition)
    a(t)
  else if (some other condition)
    b(t)
  else
    c(t);
}

int main()
{
    A myA;
    B myB;
    C myC;

    f(myA);  // some condition ensures f(myA) only calls a(myA)
    f(myB);  // some condition ensures f(myB) only calls b(myB)
    f(myC);  // some condition ensures f(myC) only calls c(myC)

    return 0;
}

但这不会编译,因为 a(B)、a(C)、b(A)、b(C)、c(A)、c(B) 未定义。

有办法解决吗?我试图查看 std::function() 或 std::bind() 是否可用于动态构造对 a()、b() 或 c() 的调用,但没有成功。

最佳答案

不要使用模板。使用重载:

void f(A x) { if (some_condition)    a(x); }
void f(B x) { if (another_condition) b(x); }
void f(C x) { if (third_condition)   c(x); }

如果在调用点已经确定了条件,则将其从 f 中删除,而是将对象保留在本地:

int main()
{
    if (some_condition)
    {
        A myA;
        f(myA);
    }
    else { /* ... */ }
}

关于C++:如何分支模板函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12699340/

相关文章:

python - 模板呈现相对路径时,python app-engine django 1.2 上的 TemplateDoesNotExist

c++ - 64 位系统可以运行包含一些内联汇编的 32 位软件吗?

具有构造函数的类的 C++ vector

c++ - 遍历多组结构

c++ - 根据模板参数不等式执行不同的功能

c++ - 从模板类派生?

c++ - 隐式模板参数无效,但仍可编译

c++ - 使用 pthread API 的并发服务器

c++ - CreateProcess的第二个参数应该是什么?

angular - NgStyle 返回 : ERROR Error: Cannot find a differ supporting object '{"background-color":"blue"}'