在模板类中通过引用传递

时间:2013-01-24 18:57:20

标签: c++ class templates parameter-passing pass-by-reference

我的基类中有一个成员函数,它通过引用接受参数:

// Base
template<class Data, class Variable_Type = double>
class Parallel_Data
{
...
void FuncA(Data& data, int& Global_ID) 
{Data_Local.push_back(data); Local_To_Global_ID.push_back(Global_ID);};
}

// Derived
class Derived: public Parallel_Data<Atom_Placed>

问题是当我尝试在派生成员函数中调用该函数时

Push_Back_This_CPU(Atom_Placed(Position_Atom), Global_ID);

我收到以下错误

no known conversion for argument 1 from ‘Atom_Placed’ to ‘Atom_Placed&’

我只是试图通过引用传递参数,并且不知道它为什么要转换?

2 个答案:

答案 0 :(得分:2)

Atom_Placed(Position_Atom)这样的临时工具不能绑定到非const引用,例如参数Atom_Place&。原因是它们是临时物体,现在任何时候都会死亡。

您可以创建Atom_Placed类型的局部变量,并将其传递给函数Push_Back_This_CPU

Atom_Placed tmp(Position_Atom);
Push_Back_This_CPU(tmp, Global_ID);

答案 1 :(得分:2)

您无法将临时值绑定到非const 左值引用。但是,由于您的函数不需要修改其参数,最简单的解决方案是采用const引用:

void FuncA(Data const & data, int const & Global_ID) 
//              ^^^^^             ^^^^^

现在您可以将临时值传递给函数。

(注意:我假设Data_LocalLocal_To_Global_ID有标准容器接口。如果他们的push_back函数也采用非const引用,那么它们也需要修复。)