将const引用传递给使用自定义对象的Template Class

时间:2012-06-09 09:50:01

标签: c++ templates

我有一个我正在创建的模板类,它接收自定义对象。看起来有点像这样。

template<typename T1,typename T2>
class myClass
{
public:
    myClass(const T1 &param1, const T2 &param2);
}



template<typename T1, typename T2>
myClass<T1,T2>::
myClass
(const T1 &param1, const T2 &param2)
{
    T1.customFunction(); //doesn't compile
}

所以我希望无论何时使用这个模板类,使用它的人都要负责确保类T1有一个名为customFunction()的函数。很公平,问题是customFunction必须保证在编译时是const,因为它是在常量参数(param1)上调用的,但是如果T1本质上是一个虚拟类,那怎么可能呢?

2 个答案:

答案 0 :(得分:1)

首先,它应该是

param1.customFunction();

因为你用参数对象调用它,而不是类型。

其次,你不必担心。无论何时构造myClass对象,编译器都会检查您传递的参数是否存在成员函数和可调用的类型。

答案 1 :(得分:0)

你稍微关闭了:在编译时函数不是“const”,但必须知道传递的类型。它不编译的原因是因为您尝试在customFunction类型上调用T1而不是在它的实例上调用。{/ p>

template<typename T1, typename T2>
myClass<T1,T2>::
myClass
(const T1 &param1, const T2 &param2)
{
      param1.customFunction(); //does compile
};