C++ 如何使用模板使变量在c++;?

C++ 如何使用模板使变量在c++;?,c++,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

我试图从用户那里获取输入,用户可以选择输入不同类型的输入(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;
}
int*函数(int数据)
{
INTA[50];
int k=0;
a[k]=数据;
k++;
//我想让选择变得广义,这样它就可以接受这两种类型的选择
//值int和char。
coutchoice;
如果(选项!=“n”)
功能(选择);
返回a;
}
所以,在上面的例子中,我想让选择更一般化。我知道如何对函数和类使用模板,但我想对变量使用模板。请帮忙

注意:上面的代码只是一个例子来说明我的问题


谢谢。

模板是编译时构造,因此无法让用户输入对模板类型产生影响

您可以做的是一些基于模板的输入转换自动化,在这里您可以决定应该检查哪些模板实例化。假设您有一个名为
GenericInput
的类来处理输入转换,该类使用模板函数
bool GenericInput::CanConvert()
TargetType GenericInput::Convert()

通用输入

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
    }
}
类泛型输入{
私人:
std::string _inputElement;//将输入存储为转换的基础
公众:
//TODO:标准类实现
模板
布尔坎康沃尔特酒店{
//TODO:从_inputElement创建std::stringstream并尝试读入TargetType变量
//如果stringstream在读取后有效,则返回true
}
模板
TargetType转换(){
//TODO:从_inputElement创建std::stringstream并尝试读入TargetType变量
//如果stringstream在读取后有效,则返回变量,否则报告错误
}
}
关于读取后的“有效”stringstream,检查两件事可能很重要:如果stringstream处于某种错误状态,则转换失败。如果stringstream中有未读字符,则转换未完成,这也可能被视为失败


请不要期望这是开箱即用的,它更多的是一个想法,而不是一个实际的实现。

你的意思是想让
int
成为一些模板参数吗?以
std::string
的形式读入数据,然后对其进行分析,找出它是什么。@TartanLlama,如果选择具有int数据类型,则我希望将其存储到数组中,如果选择为“n”,则我希望终止将元素存储到数组中list@NathanOliver,好的,你的意思是我将选择作为字符串ans,然后在解析之后,我将查看输入int或char的用户,并根据它执行任务?好的,这是一种方法,但是我可以使用模板使
变量'choice'
通用化吗?不可以。模板必须在编译时已知。如果您不知道用户将要输入什么,那么获取输入的标准方法之一是将其作为字符串读入,因为它可以保存任何内容,然后对其进行解析以了解用户实际输入的内容。
std::istream& operator >>(std::istream& stream, GenericInput& element) {
    /* TODO: read input into string member of GenericInput object */
    return stream;
}
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
    }
}