我有一个使用模板的类。它是这样的:
template <typename T>
class a
{
public:
a(T arg);
a<T> func(a arg); // This seems to work, but...
a<T> func(a<T> arg); // ...should I be doing this instead?
private:
T local;
};
请注意func
. 两者都会编译(当然,不是同时编译),但哪一个是正确的,或者没关系?首先,我指定class a
了参数...在第一种情况下,可以使用不同的类型代替 T... 例如,我可以这样做:
a<float> b;
a<int> c;
a<int> d;
d = c+ b;
我猜答案是“否”,因为它无法编译!
在第二种情况下,很明显参数必须具有相同的模板类型。
由于我上面讨论的内容,我猜编译器实际上解释a<T> func(a arg);
为a<T> func(a<T> arg);
. 我对么?