我遇到以下代码的问题:
total_goals home_team_id away_team_id home_goals away_goals home_rolling_avg away_rolling_avg
0 2 1277 1241 1 1 NaN NaN
1 3 1245 1249 2 1 NaN NaN
2 1 1242 1246 0 1 NaN NaN
3 4 1261 1248 1 3 NaN NaN
4 2 1259 1240 2 0 NaN NaN
5 3 2981 1268 1 2 NaN NaN
6 1 1244 1255 1 0 NaN NaN
7 1 1254 1276 1 0 NaN NaN
8 7 1247 12140 5 2 NaN NaN
9 3 5681 1270 2 1 NaN NaN
10 1 1249 5681 0 1 NaN NaN
# in line 10 above, 'home_rolling_avg' should show 3 (3/1)
此代码无法编译(C2977'Person':模板参数太多),但如果我做下一步:
template<typename Name>
class Person;
template<typename Name, typename FamilyNmae>
class Person {};
template<typename Name, typename FamilyName>
class Person < Name(FamilyName) >
{
public:
Person(Name a)
: k{ a }
{
}
private:
Name k;
FamilyName l;
};
它正确编译。但我无法找到根据哪个收到错误的规则。 我的意思不是来自编译器编写器的解释,而是来自标准。 有人知道吗?
答案 0 :(得分:0)
在最新的publicly available draft中,请参见14.0.0.5(如下所示)和14.5.5。
类模板不得与任何其他模板同名, 类,函数,变量,枚举,枚举器,命名空间或类型 在相同的范围(3.3)中,除非(14.5.5)中规定。
关于你究竟在问什么,这并不是那么明确,但除了&#39;条款是关键部分。它意味着“超载”#39;类模板无法完成。
如果您遵循14.5.5的引用,您可以看到您想要做的事情只能通过模板专业化来完成。
使用14.5.5.3作为如何正确地专门化类模板的指南,您可以这样做:
class EmptyName {}; //just a placeholder
template<typename Name, typename FamilyName>
class Person {};
template<typename Name>
class Person<Name, EmptyName> {};
注意如何将具有2个参数的模板声明首先定义为&#34;主要模板&#34;之后你会专攻。