将函数应用于所有模板参数

问题描述 投票:-1回答:1

我正在尝试创建一个通过id查找元素并将其从某些类型的静态向量中删除的函数。

template<typename First>
void RemoveComponentByID(EntityID ID)
{
    auto element = binary_find(First::Array.begin(), First::Array.end(), ID);
    First::Array.erase(element);
}

template<typename First, typename... Rest>
void RemoveComponentByID(EntityID ID)
{
    auto element = binary_find(First::Array.begin(), First::Array.end(), ID);
    First::Array.erase(element);
    RemoveComponentByID<Rest...>(ID);
}

但是当我调用函数RemoveComponentByID<Vector3s,Textures>(id);弹出错误“'RemoveComponentByID':对重载函数的歧义函数调用”。为什么会这样?

c++ templates variadic-templates
1个回答
0
投票

您可能会这样做(C ++ 17):

template<typename First, typename... Rest>
void RemoveComponentByID(EntityID ID)
{
    auto element = binary_find(First::Array.begin(), First::Array.end(), ID);
    First::Array.erase(element);
    if constexpr (sizeof...(Rest) > 1) {
        RemoveComponentByID<Rest...>(ID);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.