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)
答案 0 :(得分:1)
是的,要创建对象,必须知道要创建的对象的确切类型。您认为“创建部分已知类型的对象”的假定含义是什么?在您的特定情况下,您似乎真正想要的只是将X
和Y
作为该类的类型参数,然后为该类型提供一个函数调用操作符,该操作符可以接受任何{{ 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))
}
};