2

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

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 本质上是一个虚拟类,这怎么可能呢?

4

2 回答 2

1

首先,应该是

param1.customFunction();

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

其次,您不必担心。每当您构造一个myClass对象时,编译器都会检查您传递的参数是否属于成员函数存在且可调用的类型。

于 2012-06-09T10:09:12.577 回答
0

你有点偏离了:不是函数必须是“const在编译时”,而是必须知道传递的类型。它不编译的原因是因为您尝试调用customFunction类型T1而不是它的实例。

template<typename T1, typename T2>
myClass<T1,T2>::
myClass
(const T1 &param1, const T2 &param2)
{
      param1.customFunction(); //does compile
};
于 2012-06-09T10:08:12.697 回答