模板函数与pqxx结果

时间:2015-12-24 16:30:51

标签: c++ postgresql templates

这是在os x yosemite上,来自xcode 7.2 in claion。

我正在迭代postgresql数据库中的查询并将结果添加到json对象。

for (pqxx::result::const_iterator c = R.begin(); c != R.end(); ++c) {
    participants["participants"] += { \
        {"id", c[0].as<std::string>()},
        {"location", c[1].as<std::string>()},
        {"racename", c[2].as<std::string>()},
        {"racestart_at", c[3].as<std::string>()},
        {"ended_at", static_cast<bool>(c[9].size()) ? c[9].as<std::string>() : ""},
        {"racetime", static_cast<bool>(c[10].size()) ? c[10].as<std::string>() : ""}
    };
}

有些列具有空值,因此我在三元运算符中测试该转换为bool并返回结果或空字符串。为了使它更清洁一点,我尝试使用http://www.cprogramming.com/tutorial/templated_functions.html中的示例添加模板函数,并将其设置为:

template <class T>
std::string column_content(T a) {
    return static_cast<bool>(a.size()) ? a.as<std::string>() : "";
}

当我尝试编译程序时,我收到错误:

Database.cpp:9:44: error: use 'template' keyword to treat 'as' as a dependent template name
return static_cast<bool>(a.size()) ? a.as<std::string>() : "";
                                       ^
                                       template 

我查看了Cast Chars To Int in Template Functionhttp://www.cplusplus.com/doc/oldtutorial/templates/以及谷歌的其他建议,但看起来我使用了错误的语法,但我无法发现它。

如果我可以使用模板功能,那么添加到json可能看起来像

{"start_at", column_content(c[8])}

问候 克劳斯

1 个答案:

答案 0 :(得分:0)

我暂时把它改成了一个功能。根据{{​​3}}传递的类型是pqxx :: result :: field。

std::string column_content(pqxx::result::field a) {
    if (static_cast<bool>(a.size())) {
        return a.as<std::string>();
    } else {
        return "";
    }
}