如何使用相同的模板参数名

时间:2015-06-04 01:41:34

标签: c++ templates

我遇到了一个问题而且我不确定如何将其称为单行。 问题是关于模板。 情况如下: 在我的代码中,我有两个具有相同模板参数的类:

template< typename TEMPLT_PRM1,
          typename TEMPLT_PRM2>
class MyC_A;
template< typename TEMPLT_PRM1,
          typename TEMPLT_PRM2>
class MyC_B;

现在MyC_A类的一个函数接收一个MyC_B类型的参数,这就是我面临的问题所在:

template< typename TEMPLT_PRM1,
          typename TEMPLT_PRM2>
class MyC_A
{
private:
//....
public:
    void foo( MyC_B<TEMPLT_PRM1, TEMPLT_PRM2> & bInst )
    {
         //....
    }
};

然后我实例化一个MyC_A类型的对象和一个MyC_B类型的对象。这是实例化:

MyC_A<MyC_C, MyC_D> myc_a_inst;
MyC_B<MyC_E, MyC_F> myc_b_inst;

myc_a_inst.foo( myc_b_inst);

这给了我一个错误,说找不到函数定义。这意味着编译器正在寻找void foo(MyC_B&lt; MyC_C,MyC_D&gt;)并且找不到它。相反,我的MyC_B对象实例属于MyC_B&lt; MyC_E,MyC_F&gt;。

我相信这是因为MyC_A和MyC_B这两个类的模板参数是相同的,我无法改变。

非常感谢任何有关如何解决此问题的建议。

顺便说一句,我也试过以下但没有运气。

template< typename TEMPLT_PRM1_B,
          typename TEMPLT_PRM2_B>
void foo( MyC_B<TEMPLT_PRM1_B, TEMPLT_PRM2_B> & bInst )

1 个答案:

答案 0 :(得分:0)

您已使用类型名称MyC_E&amp;创建了myc_b_inst。 MyC_F。在函数foo中,传递的参数使用类型名称MyC_C&amp; MyC_D(如果你没有仔细查看该函数的定义。你使用了类MyC_A使用的相同类型名称,在本例中为MyC_C&amp; MyC_D)。所以参数不匹配。这是错误的可能原因。试试:

MyC_B<MyC_C, MyC_D> myc_b_inst;

而不是

MyC_B<MyC_E, MyC_F> myc_b_inst;

&安培;看结果。