gpt4 book ai didi

c++:声明多个模板的两种方法

转载 作者:行者123 更新时间:2023-11-30 05:42:03 25 4
gpt4 key购买 nike

我有以下代码:

template<typename T>
struct Pair3{
T first, second;
Pair3() : first(T()), second(T()) {}
Pair3(T first, T second) : first(first), second(second) {}
Pair3(const Pair3<T>& in) : first(in.first), second(in.second) {}
template<typename U> void copyFrom(Pair3<U> in);
};

template<typename T>
template<typename U>
void Pair3<T>::copyFrom(Pair3<U> in){
first = in.first;
second = in.second;
}

为什么要写

template<typename T>
template<typename U>

copyFrom 实现之前我不会写:

template<typename T, typename U>.

那是什么意思?为什么会错呢?相反:为什么我不能像这样声明 struct Pair3:

  template<typename T, typename U>
struct Pair3{
T first, second;
Pair3() : first(T()), second(T()) {}
Pair3(T first, T second) : first(first), second(second) {}
Pair3(const Pair3<T>& in) : first(in.first), second(in.second) {}
void copyFrom(Pair3<U> in);
};

甚至:

template<typename T>
template<typename U>
struct Pair3{
T first, second;
Pair3() : first(T()), second(T()) {}
Pair3(T first, T second) : first(first), second(second) {}
Pair3(const Pair3<T>& in) : first(in.first), second(in.second) {}
void copyFrom(Pair3<U> in);
};

谢谢!

最佳答案

根据标准N4431 §14.5.2/1 成员模板 [temp.mem](强调我的):

模板可以在类或类模板中声明;这样的模板称为成员模板。成员模板可以在其类定义或类模板定义之内或之外定义。 在其类模板定义之外定义的类模板的成员模板应使用类模板的模板参数指定,后跟成员模板的模板参数。

[示例:

template<class T> struct string {
template<class T2> int compare(const T2&);
template<class T2> string(const string<T2>& s) { /∗ ... ∗/ }
};
template<class T> template<class T2> int string<T>::compare(const T2& s) {
}

——结束示例]

定义为:

template<typename T, typename U>.

这是错误的,因为这不是 C++ 标准指定类模板的成员模板应如何在模板类定义之外定义的方式。

关于c++:声明多个模板的两种方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30854951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com