如何从变量值初始化对象

How can you initialize an object from a variables value?

本文关键字:初始化 对象 变量值      更新时间:2023-10-16

我想通过获取用户输入来生成一个即将初始化的对象的名称。这可能吗?是否有一种方法来命名一个基于变量值的对象?

我知道下面的代码"测试x"不起作用,我知道为什么…但是有办法让它起作用吗?我已经想了两天了。我最接近的东西可能是stringstreams…或者更糟的是……不可能吗?任何帮助吗?

#include <iostream>
using namespace std;
#include <string>
class test
{
public:
    string wtf;
};
int main()
{
    test y;         // showing normal initialize
    y.wtf = "a";    // assign value

    string x;       
    cin >> x;       // initialize string and get input
    test x          // trying to initialize object based on input
    x.wtf = "a";    // then assign a value

    cout << y.wtf;  // printing both to test
    cout << x.wtf;
    return 0;
}

我的意图是有一个单一的数组,保存员工编号(与一个"emp"或开头的东西连接),为每个员工初始化对象。因此,用户将输入一个员工编号,比如1234,我将创建一个字符串,添加emp + 1234,结果是"emp1234"……然后我将启动一个像"test emp1234"这样的对象,它将在类内部与一堆不同的变量相关联。

我可能看错了…而且可能解释得很蹩脚。我显然是新手,但我需要任何可能的帮助。

我会这样做:

#include <vector>
#include <string>
#include <iostream>
#include <stdexcept>
test make_test()
{
    std::string s;
    if (!(std::cin >> s))
    {
        throw std::runtime_error("Premature end of input");
    }
    return { "emp" + s };
}
int main()
{
    std::vector<test> v;
    for (int i = 0; i != 10; ++i)
    {
         v.push_back(make_test());
         std::cout << "Added employee '" << v.back().wtf << "'n";
    }
}

这将用10条员工记录填充一个向量。

不,不能在运行时创建变量名,因为运行时不存在名称。它们是静态结构,只在编译过程中有用。

然而,听起来你真的只想要一个std::map。您可以使用它从整数(员工编号)映射到test对象:

std::map<int, test> employees;
int employeeNumber;
std::cin >> employeeNumber;
employees[employeeNumber]; // Will default construct a test object mapped to employeeNumber
// Alternatively:
test t( /* some constructor args */ );
employees[employeeNumber] = t;

然后,如果您想访问雇员编号为1234test对象,例如,您可以简单地执行:

employees[1234]