我想做这样的事情......
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/