Templates 在C+中通过引用和形成引用+;98和C++;11

Templates 在C+中通过引用和形成引用+;98和C++;11,templates,c++11,reference,pass-by-reference,c++98,Templates,C++11,Reference,Pass By Reference,C++98,以下函数在C++11中工作: /** * @brief Enqueue a data item in the PQ with given priority. * * @param data Data item to insert into PQ * @param priority Priority level of item */ void enqueueWithPriority(const T& data, const PT priority) { size_t sizeVe

以下函数在C++11中工作:

/**
* @brief Enqueue a data item in the PQ with given priority.
*
* @param data Data item to insert into PQ
* @param priority Priority level of item
*/
void enqueueWithPriority(const T& data, const PT priority) {

    size_t sizeVec = dataWithPriorityVec.size();

    // push the pair of data parameters to the end of the data vector
    dataWithPriorityVec.push_back(std::make_pair<const T&, const PT&>(data, priority));

    // call bubble up to sort data priorities
    bubbleUpHeap(sizeVec);

}
/**
*@brief以给定优先级将PQ中的数据项排队。
*
*@param要插入PQ的数据项
*@param项目优先级
*/
void enqueueWithPriority(常数T和数据,常数PT优先级){
size_t sizeVec=dataWithPriorityVec.size();
//将这对数据参数推送到数据向量的末尾
dataWithPriorityVec.push_back(标准::生成对(数据,优先级));
//调用bubble up对数据优先级进行排序
布布卢法普(sizeVec);
}
但是,它在C++98中不起作用,因为我必须将
std::make_pair
部分更改为:
std::make_pair
,因为无法在98中“存储”引用。类似的语法出现在我的模板类的其他几个函数中(其中
T
PT
是通用的类型名)


有没有一种方法可以解决这个问题,这样我就可以使用单一形式的语法,因为前者在C++11中有效,但在98中无效,而后者在C++98中有效,但在11中无效——不幸的是,我需要在这两种环境中都进行测试。

priority参数不是通过引用传递的。这是故意的吗?“后者在C++98中工作,而不是11”,只要使用
std::make_pair(data,priority)
,因为C++11将
&
附加到模板参数列表中给定的类型上,您是否试图使
dataWithPriorityVec
成为
向量,这就是它的定义:
std::vectordataWithPriorityVec
。此外,PT不是通过引用传递的,因为它是一种基本类型,而不是一个对象。
priority
参数不是通过引用传递的。这是故意的吗?“后者在C++98中工作,而不是11”,只要使用
std::make_pair(data,priority)
,因为C++11将
&
附加到模板参数列表中给定的类型上,您是否试图使
dataWithPriorityVec
成为
向量,这就是它的定义:
std::vectordataWithPriorityVec
。另外,PT不是通过引用传递的,因为它是一个基本类型,而不是一个对象。