0

我想通过获取用户输入来生成即将初始化的对象的名称。这可能吗?有没有办法根据变量值命名对象?

我知道在“test x”下面的代码中不起作用,我知道为什么......但是有没有办法让它工作?我一直试图弄清楚这两天。我最接近的可能是字符串流......甚至更糟......这是不可能的?有什么帮助吗?

#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”这样的对象,它会有一堆与它相关的差异变量,在类内。

我可能看错了……而且可能解释得很糟糕。我显然对此很陌生,但我可以使用任何可能的帮助。

4

2 回答 2

0

我会这样做:

#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";
    }
}

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

于 2013-04-08T21:16:58.030 回答
0

不,您不能仅仅因为名称在运行时不存在而在运行时创建变量名。它们是仅在编译期间有用的静态结构。

但是,听起来你真的只想要一个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;

然后,如果您想test使用员工编号访问对象1234,例如,您可以简单地执行以下操作:

employees[1234]
于 2013-04-08T21:18:07.313 回答