2015-08-03 3 views
0

Возможно ли передать один объект методу, который принимает контейнер объектов?C++ 11 Простой объект для метода, который получает контейнер объектов

Например:

У меня есть пользовательский класс 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

Либо вы должны изменить (или перегрузить) функцию, либо обеспечить то, что она ожидает. Другого выбора нет. – Quentin

ответ

4

Используйте список с предварительным началом.

insert({ entry }); 

Список можно преобразовать в vector типа, и указывает контейнер с одним элементом.

+0

+1 для awesome ha. Я никогда не думал, что это сделает для вас это преобразование, это гораздо лучшее решение, чем мое. btw для тех, кто интересуется этой ссылкой, расскажет вам больше о границах конверсий, которые он сделает: http://en.cppreference.com/w/cpp/language/list_initialization – user3164339

+0

Можно ли это экстраполировать на другие типы контейнеров? –

0

Вы, как упоминалось Квентин, вы на самом деле есть только 2 варианта здесь:

1) перегрузить функцию. Поэтому создайте еще одну функцию с сигнатурой void insert(Entry* single_entry) и создайте SQL-запрос для вставки только одного.

или

2) при создании новой записи через Entry entry(1, "RandomName") создать вектор с размером 1 и передать вашу insert функции.

Смежные вопросы