元组博尔值不会改变

时间:2017-07-27 14:48:32

标签: c++ class tuples

我有一个小问题来改变元组bool值。有谁知道bool值是如何变化的?函数setState()找到搜索到的密钥!非常感谢你的帮助!

keyManager.h

class keyManager
{
private:
    std::vector<std::tuple<std::string, bool>> productKeys;

public:
    void addProductKey(std::string key);
    std::tuple<std::string, bool> getProductKey(int index);
    void setState(std::string searchKey, bool state);


    keyManager();
    ~keyManager();
};

keyManager.cpp

void keyManager::addProductKey(std::string key)
{
    productKeys.emplace_back(key, false);
}

std::tuple<std::string, bool> keyManager::getProductKey(int index)
{
    return productKeys[index];
}

void keyManager::setState(std::string searchKey, bool state)
{
    for (int x = 0; x < productKeys.size(); x++)
    {
        auto t = productKeys[x];
        if (std::get<std::string>(t) == searchKey)
        {
            std::get<bool>(t) = state;
        }
    }
}

主要()

keyManager kManager;
kManager.addProductKey(KEY_1);

kManager.setState(KEY_1, true);

auto t = kManager.getProductKey(0);
std::cout << std::get<bool>(t) << std::endl;

输出 0

程序执行没有错误,因此我假设我在某处发生了错误。

3 个答案:

答案 0 :(得分:3)

keyManager::setState

auto t = productKeys[x];

制作副本,使用

auto& t = productKeys[x];

代替获取对productKeys[x]的引用。

答案 1 :(得分:1)

此行会复制您的double

tuple

切换到参考

auto t = productKeys[x];

答案 2 :(得分:0)

问题出在这一行:

auto t = productKeys[x];

t被推断为类型为std::tuple<std::string, bool>,而=会触发元组的副本分配运算符,这实际上会使t成为副本 productKeys[x]

您在t上执行的所有操作仅影响t。 您应该强制编译器推导出t作为引用(类型为std::tuple<std::string, bool>&),如下所示:

auto& t = productKeys[x];