类中的模板参数

时间:2018-11-27 02:07:17

标签: c++

template<typename T, typename X, typename Y>
class multipler{
public:
 mutiplier(X xi, Y yi):x(xi),y(yi){}
 T operator ()(T t){
  return (x(t) * y(t))
 }

private:
 X x;
 Y y;

}


multiplier(obj1, obj2); //temp object

在创建模板类的临时对象之前,必须知道所有模板参数? 直到有人在乘数(obj1,obj2)上调用()才知道T 例如multiplier(obj1,obj2)(5)

2 个答案:

答案 0 :(得分:1)

是的,要创建对象,必须知道要创建的对象的确切类型。您认为“创建部分已知类型的对象”的假定含义是什么?在您的特定情况下,您似乎真正想要的只是将XY作为该类的类型参数,然后为该类型提供一个函数调用操作符,该操作符可以接受任何{{ 1}}作为参数。为此,您只需使函数调用操作符本身成为模板:

T

答案 1 :(得分:-2)

是的

template<typename X, typename Y>
class multipler{
public:
  mutiplier(X xi, Y yi):x(xi),y(yi){}
  template<class T>
  T operator ()(T t){
    return (x(t) * y(t))
  }
};