gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:22:57 26 4
gpt4 key购买 nike

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

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com