【发布时间】:2016-05-22 09:14:45
【问题描述】:
我有一个结构,其中包含许多不同类型的字段:
struct team_stats{
char team_name[ TEAM_NAME_LEN ]; // Name of NFL team
int games; // Number of games played in the season
float pts_per_game; // Points per game
...
}
我创建了返回指向结构中任何字段的指针的方法 它看起来像:
template <class T>
T* getField (int fieldNum, team_stats &team) {
if(fieldNum==0) return &team.team_name;
if(fieldNum==1) return &team.games;
if(fieldNum==2) return &team.pts_per_game;
...
}
例如我想读一些字段:
template <class T>
void readTeam(team_stats &team) {
for (int i = 0; i < NO_FIELDS; i++)
cin >> *getField<T>(i,team);
出现问题:
由于我有一个模板,我需要在调用方法时传递一些类型 - getField(i, team)。但是我有不同类型的字段,编译器会说类似 " 的消息无法将 type of field games 转换为 some type"
统一更新: 但是对于外部函数我需要指定类型T,如何使其动态化?
UPD_2: 我找到了很好的解决方案!我在下面回答了我的问题!
【问题讨论】:
-
你需要
cin >> getField<T>(i,team); -
它有帮助,但它在外部函数中导致了同样的错误(
for (int j = 0; j < NO_TEAMS; j++) readTeam(arrayOfStats[i].teams[j]))。是否可以使用这种方法读取此结构的字段?问题是我需要动态识别字段的类型。 -
您必须调用它来提供模板参数的类型。像
readTeam<int>(team);这样的东西。一般来说,你在那里尝试做的事情是行不通的。 -
是的!我明白为什么这是不可能的)要取消引用指针,我们应该确切地知道这个指针的类型是什么。谢谢
-
还有一个错误!当我传递类型
时,会导致某些字段无法转换的错误(但该字段永远无法访问)。
标签: c++ templates pointers types