C++可变参数-函数不会接受任何额外的参数



我正在使用varadic参数来尝试对我正在使用的类进行模板化,当我尝试调用类中的addComponent函数时,我遇到了一个错误,即该函数不接受3个参数。我很不确定为什么会这样,我还没有找到解决办法。

等级代码:

template <typename T, typename... Args>
class RenderComponentGroup : public RenderGroupBase
{
public:
using RenderGroupBase::RenderGroupBase;
void iterate() { IterateRenderComps<T>(m_Components); };
void addComponent(std::vector<RenderComponent*>* compPointers, Args... arguments)
{
//Check if any dead
for (int i = 0; i < m_Components.size(); i++)
{
if (m_Components[i].isDead())
{
m_Components.emplace(m_Components.begin() + i, arguments...);
m_Components[i].updatePointer();
return;
}
}
//Resize components array
m_Components.emplace_back(arguments...);
m_Components[m_Components.size() - 1].attachToObject(compPointers);
for (int i = 0; i < m_Components.size(); i++)
{
m_Components[i].updatePointer();
}
}
private:
unsigned int m_ID = 0;
std::vector<T> m_Components;
};

调用的函数:

std::shared_ptr<RenderComponentGroup<SpriteRender>> spriteGroup(new   RenderComponentGroup<SpriteRender>());
//Everything after renderComps is the arguments
spriteGroup->addComponent(&sprite->m_RenderComps, &sprite->m_Sprite, &m_SpriteRenderer);

错误:

Error   C2660   'RenderComponentGroup<SpriteRender>::addComponent': function does not take 3       arguments    SpaceEngine D:RepositoriesSpace EngineSpaceGamesrcgamestatesOverworld.cpp    33  

我刚发布这条消息就发现了错误,我觉得自己很愚蠢。

参数是在类的顶部声明的,这意味着在创建时,参数解析为空。因为这在技术上是有效的,所以直到我尝试向函数添加参数时,它才抛出错误。将template<typname... Args>移到函数本身的顶部意味着它解析为函数调用中的参数。

固定:

template <typename T>
class RenderComponentGroup : public RenderGroupBase
{
public:
template<typename... Args>
void addComponent(std::vector<RenderComponent*>* compPointers, Args... arguments)
{
//Check if any dead
for (int i = 0; i < m_Components.size(); i++)
{
if (m_Components[i].isDead())
{
m_Components.emplace(m_Components.begin() + i, arguments...);
m_Components[i].updatePointer();
return;
}
}
//Resize components array
m_Components.emplace_back(arguments...);
m_Components[m_Components.size() - 1].attachToObject(compPointers);
for (int i = 0; i < m_Components.size(); i++)
{
m_Components[i].updatePointer();
}
}
private:
unsigned int m_ID = 0;
std::vector<T> m_Components;
};

相关内容

最新更新