#include <iostream>
#include <string>
#include <vector>
#include <cassert>
#include <typeinfo>
#include <algorithm>
#include <boost/any.hpp>
typedef boost::any cell_t;
typedef std::vector<cell_t> db_row_t;
db_row_t get_row(const char *) {
db_row_t row;
row.push_back(10);
row.push_back(10.1f);
row.push_back(std::string("hello world!"));
return row;
}
struct db_sum {
public:
explicit db_sum(double &sum) : sum_(sum) {
}
void operator () (const cell_t &value) {
const std::type_info &ti = value.type();
if (typeid(int) == ti) {
sum_ += boost::any_cast<int>(value);
}
else if (typeid(float) == ti) {
sum_ += boost::any_cast<float>(value);
}
}
private:
double &sum_;
};
int main() {
db_row_t row = get_row("");
double res = 0.0;
std::for_each(begin(row), end(row), db_sum(res));
std::cout << res << std::endl;

return 0;
}