如何在c++中使用模板使变量通用化
How to use template to make variables generalized in c++?
我试图接受用户的输入,用户可以选择输入不同类型的输入(char,int float)。根据输入的值,我必须采取适当的行动。
例如。我有一个功能如下:-
int* function(int data)
{
int a[50];
int k = 0;
a[k] = data;
k++;
// I want to make choice generalized so that it can accept both type of
// values int as well as char.
cout<<"n Enter integer element to insert into array, otherwise press 'n' to terminate array list: ";
cin>>choice;
if(choice != 'n')
function(choice);
return a;
}
所以,在上面的例子中,我想使选择广义化。我如何为函数和类使用模板,但是,我想为变量这样做。请帮忙。
注意:上面的代码只是一个例子来说明我的问题。
谢谢。
模板是一个编译时构造,因此无法让用户输入对模板类型产生影响。
您可以做的是一些基于模板的输入转换自动化,在这里您可以决定应该检查哪些模板实例化。假设您有一个名为GenericInput
的类来处理输入转换,该类具有模板函数bool GenericInput::CanConvert<TargetType>()
和TargetType GenericInput::Convert<TargetType>()
GenericInput in;
std::cin >> in;
if (in.CanConvert<int>()) {
// some action
}
else if (in.CanConvert<char>()) {
// another action
}
// ...
它基本上是一个包装器,用于首先读取字符串,然后检查如何解释字符串。
要实现它,您需要以下内容:
过载operator >>
std::istream& operator >>(std::istream& stream, GenericInput& element) {
/* TODO: read input into string member of GenericInput object */
return stream;
}
GenericInput
级
class GenericInput {
private:
std::string _inputElement; // store input as base for conversion
public:
// TODO: standard class implementation
template <typename TargetType>
bool CanConvert() {
// TODO: create std::stringstream from _inputElement and try to read into a TargetType variable
// return true if the stringstream is valid after the read
}
template <typename TargetType>
TargetType Convert() {
// TODO: create std::stringstream from _inputElement and try to read into a TargetType variable
// return variable if the stringstream is valid after the read, otherwise report error
}
}
关于读取后的"有效"字符串流,检查两件事可能很重要:如果字符串流处于某种错误状态,则转换失败。如果字符串流中有未读字符,则表示转换不完整,这也可能算作失败。
请不要指望这是开箱即用的,它更多的是一个想法,而不是一个实际的实现。
相关文章:
- 为什么C++有不同的变量初始化方式?
- 静态 constexpr 成员变量初始化
- C++不同的变量初始化
- 类外的静态变量实例化
- 全局和局部变量初始化与 constexpr 的差异背后的基本原理
- 是变量初始化失败吗?
- 主函数体未检测到对重载可变变量模板化函数C++的调用
- 视觉C++:在 DLL 加载期间,全局变量初始化顺序是否具有确定性?
- 类静态变量初始化顺序
- 使用 constinit 变量初始化 constexpr 变量
- 是否可以在不修改父类的情况下将成员变量初始化推迟到继承的类?
- 使用全局变量初始化不同编译单元中的其他全局变量
- 使用默认构造函数引用成员变量初始化错误
- 宏的 if 语句中的变量初始化
- 使用动态布尔变量实例化模板
- 不稳定的C :每行适应性变化多变量初始化
- 如何使用变量参数化类型?C++
- 同一函数中的静态函数变量初始化顺序
- C 语言中的静态变量初始化
- 如何在c++中使用模板使变量通用化