【发布时间】:2014-12-21 03:28:20
【问题描述】:
我正在努力让用户选择数据类型模板将被创建为。 由于必须在编译时定义模板类型,我必须指定数据类型模板将使用 eg(string,int, so on),但这意味着我不能在以后更改它,从让我们说 string 到 int 即使我的模板支持它,因为模板类对象被声明为字符串。 我的班级声明如下:
template <class T>
class MyHashTable
{
public:
string deleted="deleted";
unsigned short tableSize;
// array of vectors, hash table container
vector<T>* myTable;
vector<T>* deletionTable;
MyHashTable(unsigned short tableSize) : myTable(new vector<T>[tableSize]), deletionTable(new vector<T>[tableSize])
{
this->tableSize=tableSize;
}
类外的对象声明
MyHashTable <string>* myChainedTable=NULL ;
string tableType;
对象初始化
if (myChainedTable)
{
delete myChainedTable;
myChainedTable=NULL;
}
getType();
if (!myChainedTable)
{
if (tableType=="string")
myChainedTable= new MyHashTable<string>(length);
if (tableType=="char")
MyHashTable<char> myChainedTable(length); // no difference with or without using new keyword
if (tableType=="double")
MyHashTable<double> myChainedTable(length);
if (tableType=="float")
MyHashTable<float> myChainedTable(length);
if (tableType=="int")
MyHashTable<int> myChainedTable(length);
cout<<tableType<<" table of size "<< length<<" created"<<endl;
我尝试将类对象传递给函数而不是将其作为全局变量,但也无法使其工作。
我真正需要的是单个模板对象,它可以有:int、string、char、double、float 类型,我有 3 个需要访问模板类对象的函数,并且有 5 个不同的对象和 200 行 if每种情况的陈述听起来都是最糟糕的解决方案。 我被困了一段时间,只是不知道该怎么做,任何帮助都将不胜感激。
void getType()
{
cout<<"Enter table type, types available: int, char, float, double, string.\n";
tableType=getInput();
while((tableType != "int")&&(tableType !="float")&&(tableType !="double")&&(tableType!="char")&&(tableType !="string"))
{
cout<<"Invalid type, please try again "<<endl;;
tableType=getInput();
}
}
【问题讨论】:
-
你从哪里得到
tableType?这听起来不像是模板的工作。 -
@Jefffrey 更新了我的问题,最初将 tableType 作为返回语句,在进行一些更改时更改为全局变量,但没有多大帮助。
-
法典定义注定要失败。每个都是 if 语句的本地,并且在您退出 if 时立即被忽略!