我试图允许用户选择模板是int,double还是字符串。但是使用我的方法存在继承问题,因为我使用If语句初始化类模板对象,每当我想要进行方法调用时,编译器都会抛出错误。
template<class T>
class foo {
private:
int bar
public:
void setBar(int newBar);
};
template<class T>
void foo<T>::setBar(int newBar) {
bar = newBar;
}
int main() {
int inputType;
cout << endl << "1 for integer, 2 for double, 3 for strings." << endl <<
"What kind of data do you wish to enter?(1-3): ";
cin >> inputType;
if(inputType == 1) {
foo<int> v1;
} else if(inputType == 2) {
foo<double> v1;
} else if(inputType == 3) {
foo<string> v1;
} else {
cout << "Error - Please enter in a proper #: ";
}
//Compiler Error
v1.setBar(3);
return 0;
}
由于我这样做,每当我尝试拨打setBar()
时,我都会收到一条错误,说“v1在此范围内未被删除”。如何通过此操作并允许用户选择AND允许方法调用?我知道如果我没有使用模板,我可以在if语句之前声明它,但是对于编译器要求的模板,我告诉它我想要的类型。
谢谢!
答案 0 :(得分:2)
当您尝试这样做时,无法完成此操作。第一个问题是不同的变量v1
是在不包含后续使用的范围中定义的。可以采取不同的解决方法,其中首先想到的是:
实施例
template <typename T>
void process() {
foo<T> v1;
v1.setBar(3);
}
int main() {
// …
switch (input) {
case 1: process<int>(); break;
case 2: process<double>(); break;
default: process<string>(); break;
};
}