Вопрос по метапрограммированию
От: RiNSpy  
Дата: 11.06.19 20:11
Оценка:
Вообщем, проблема такая. Есть некое API, которое пишет куда-то вектора данных разных типов, которые я ему даю. Что-то вроде такого:


template<class T>
class DataSet
{
public:
    DataSet(const std::string& colname) {
        m_name = colname;
    }
    std::vector<T> getValues() {
        return m_values;
    }
    void addValue(const T& val) {
        m_values.push_back(val);
    }
    void write(const std::vector<T>& values) {
        // write out the vector
    }
private:
    std::string m_name;
    std::vector<T> m_values;
};


Мне надо обработать тонны подобных векторов и записать их методом Dataset::write. Для примера:

    std::vector<std::string> column_names = {"A", "B", "C"};
    
    std::vector<int> intValues;
    std::vector<float> floatValues;
    std::vector<double> doubleValues;
    
    DataSet<int> intDataset("A");
    DataSet<float> floatDataset("B");
    DataSet<double> doubleDataset("C");
    
    /*add elements to intValues, floatValues, doubleValues*/
    
    intDataset.write(intValues);
    floatDataset.write(floatValues);
    doubleDataset.write(doubleValues);


Проблема в том, что у меня этих веторов очень много, они разных типов. Их количество, имена и типы иногда меняются в спецификации, до этапа компилирования, и мне приходится их вручную менять в коде. Код получается очень некрасивый.

Хотелось бы что-то такое сделать, чтобы я мог где-то в одном месте определить их имена и типы, а потом создать вектора, DataSet'ы, вызвать write(...) в цикле. То есть если имена и типы поменяются, чтобы мне не надо было их менять вручную в 3х местах, и если у меня этих векторов 100 штук, чтобы не плодить 300 строк кода.

Как мне это элегантнее сделать?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.