0

我有一个使用模板的类。它是这样的:

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);. 我对么?

4

1 回答 1

2

在你的类模板a中意味着a<All the tempalte args here>a<T>

所以你的两个功能都是一样的。

如果你想提供另一种类型,你应该使用模板函数

template <typename T> {
class a {
    template<typename U>
    a<T> func(a<U> arg);
}

您也可以考虑 returnstd::common_type<T, U>::type但在您的情况下它不会编译,因为floatand的常见类型intfloat

a<float> x = a<int>(1) + a<float>(8)

应该在这种情况下工作

于 2013-07-29T23:50:05.333 回答