C ++ 11将简单对象传递给接收对象容器的方法

时间:2015-08-03 22:04:43

标签: c++11

是否可以将单个对象传递给接受对象容器的方法?

E.g:

我有一个自定义类Entry绑定到数据库中的表:

class Entry
{
public:
    Entry(int64_t iId, const std::string &sName);    
    int64_t id();    
    std::string name();

private:
    int64_t iId_;
    std::string sName_;
}

void insert(const std::vector<Entry> &entries)
{
    // For the sake of example
    session.start();
    session << "INSERT INTO MyTable (ID, Name) VALUES " << bind(entries);
    session.stop();
}

void function()
{
    Entry entry(1, "RandomName");

    insert( ? entry ? ); // What should I do here?
}

如果没有为一个对象实例化一个新容器,或者没有覆盖用于接收简单对象的insert方法,是否可以这样做?

2 个答案:

答案 0 :(得分:4)

使用braced-init-list。

insert( { entry } );

列表可以转换为vector类型,并指定具有一个元素的容器。

答案 1 :(得分:0)

你如同昆汀所提到的,你真的只有两个选择:

1)重载功能。因此,使用签名void insert(Entry* single_entry)创建另一个函数,并创建一个SQL查询以仅插入一个。

2)当您通过Entry entry(1, "RandomName")创建新条目时,请创建一个大小为1的向量,并将其传递给insert函数。