是否可以将单个对象传递给接受对象容器的方法?
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
方法,是否可以这样做?
答案 0 :(得分:4)
使用braced-init-list。
insert( { entry } );
列表可以转换为vector
类型,并指定具有一个元素的容器。
答案 1 :(得分:0)
你如同昆汀所提到的,你真的只有两个选择:
1)重载功能。因此,使用签名void insert(Entry* single_entry)
创建另一个函数,并创建一个SQL查询以仅插入一个。
或
2)当您通过Entry entry(1, "RandomName")
创建新条目时,请创建一个大小为1的向量,并将其传递给insert
函数。