我正在尝试创建一个通过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 ++ 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);
}
}