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

标签 c++ templates

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

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/

相关文章:

c++ - 如何将 AnsiString 转换为 char?

c++ - 为什么在 C++ 中更喜欢 char* 而不是 string?

c++ - 用 Lapack 的 dgeqrf_ 求解线性系统

node.js - 我可以在不使用 res.render/return 信息给用户的情况下以 Express 方式渲染 html 吗?

c++ - 模板模板推导给我一个通用引用的错误

c++ - 为什么使用局部结构作为 STL 函数参数的代码不能在 g++ 中编译?

c++ - C++ 中的加权方差和加权标准差

c++ - long long int 的限制是什么?

c++ - 使用 QNetworkAccessManager 的 Qt 控制台应用程序

c++ - 这段代码必须有效吗?