шаблон setValue в шаблоне (двойной шаблон) - PullRequest
0 голосов
/ 04 июня 2018

функция (нужна помощь):

template <typename T>
void QueryMember(const std::string names, const std::string& table ,vector<T>& vec)
{
    try
    {
        boost::scoped_ptr<sql::Statement> stmt(con->createStatement());
        std::string sql;
        sql = FormatArgs("select %s from %s", names, table);

        boost::scoped_ptr< sql::ResultSet > res(stmt->executeQuery(sql));
        sql::ResultSetMetaData* res_meta = res->getMetaData();
        vector<std::string> vecStr;
        int col = res_meta->getColumnCount();
        while (res->next())
        {
            vecStr.clear();
            for (int i=1;i<=col;i++)
            {
                vecStr.push_back(res->getString(i));
            }
            T t;
           //how to set the value of t and then push_back?
            vec.push_back(t);
        }
    }
    catch (sql::SQLException &e)
    {
        std::cout << "QueryMember ERR: " << e.what() << endl;
    }
}

это как заданное значение в двойном шаблоне

здесь:

T t;
//how to set the value of t and then push_back?
vec.push_back(t);

Я пробовал с memcpy tempclassчтобы получить то, что я хочу ..

и подобную строчку (может быть, все строки)

typedef struct tagTest
{
    std::string test1;
    std::string test2;
    std::string test3;

}TESTQUERY;

и вот что я использовал функцию:

vector<TESTQUERY> vec;
QueryMember("*", "test", vec);

1 Ответ

0 голосов
/ 04 июня 2018

Если я правильно понимаю ваш вопрос, вы хотите иметь возможность передавать любое значение T в функцию (на основе примера вызова функции, который вы показали).Чтобы сделать это, вам нужно добавить дополнительный параметр:

void QueryMember(const std::string names, const std::string& table, const T& t)

Затем вам просто нужно использовать этот t вместо создания другой переменной позже.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...