gpt4 book ai didi

c++ - 在带有模板参数的模板中使用重载函数

转载 作者:太空宇宙 更新时间:2023-11-04 16:18:59 24 4
gpt4 key购买 nike

可以用一种好的方式来完成吗?

template <class T> Init(T &object, Type type)
{
Collider collider;
switch (type)
{
case TypeA:
collider.InitAsA(object);
break;
case TypeB:
collider.InitAsB(object);
}
}

调用

A a;
Init(a, TypeA);
B b;
Init(b, TypeB);

A 和 B 没有共同的祖先。

void Collider::InitAsA(A &a);
void Collider::InitAsB(B &b);

编辑:

Collider::InitAs.. 无法更改为模板,并且根本无法更改,因为我无法更改其他代码。

类型可以是int,其实是枚举。

最佳答案

对于 Init() 函数,您可以只使用函数重载:

void Init(A &object)
{
Collider collider;
collider.InitAsA(object);
}

void Init(B &object)
{
Collider collider;
collider.InitAsB(object);
}

但是,您可以重载 Init() 方法:

void Collider::Init(A &a);
void Collider::Init(B &b);

然后,如果你仍然想要一个模板函数,它可能看起来像这样:

template <typename T>
void Init (T &object)
{
Collider collider;
collider.Init(object);
}

关于c++ - 在带有模板参数的模板中使用重载函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19396510/

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