Metoda która potrafi przyjmować różne struktury

0

Witam mam problem i nie wiem jak zrobić by moja metoda read() mogła przyjmować różne struktury

1

std::variant, przeciążanie lub polimorfizm. Do wyboru do koloru.

3

Albo szablony.

0

no właśnie chciałbym użyć szablonów ale nigdy ich nie stosowałem

1

Pokaż, kod w jakim ta metoda ma byc kontekście i pomyślimy.

0
#include "FileCSV.h"

FileCSV::FileCSV() {};
FileCSV::~FileCSV() {};

bool FileCSV::open(string pathToFile) {
    setPathToFile(pathToFile);
    file.open(getPathToFile(), ios::in | ios::out);
    if (!file.is_open()) {
        cout << "Error: Can't open the file or File doesn't exist" << endl;
        return false;
    }
    return true;
}

void FileCSV::read() {

}

W metodzie read chce przyjmować jako parametr struktury np. z klasy login , transakcje...
Te struktury sa w innych klasach

0

Wygląda na materiał na polimorfizm - ale zapodaj te klasy login, transakcje itd.

0
87kelthuzad napisał(a):

W metodzie read chce przyjmować jako parametr struktury np. z klasy login , transakcje...
Te struktury sa w innych klasach

A nie lepiej, żeby te klasy miały funkcje typu toString/fromString. Wtedy FileCSV nie ma silnej zależności, zajmuje się wyłącznie tym czym powinien i nie wtrąca się w implementacje innych klas.

0
#ifndef HOMEBUDGET_LOGIN_H
#define HOMEBUDGET_LOGIN_H

#include <iostream>
#include <string>

using namespace std;

struct recordLogin {
    string nickCSV;
    string passwordCSV;
};

class Login {
private:
    recordLogin sRecordLogin;
    string nick;
    string password;

    void comparisonOfLoginWithCVS();

public:
    Login();
    ~Login();
    Login(string nick, string password);

    void setNick(string nick) { this->nick = nick; }
    void setPassword(string password) { this->password = password; }
    void test();
};

#endif //HOMEBUDGET_LOGIN_H
0

Ok, to stwórz sobie klasę czysto wirtualną, z której wszelkie struktury będą dziedziczyły:

class Readable
{
   void fromRawData(const char *data) = 0;//to się przyda jakbyś zapisywał do plików binarnie
   void fromCSVString(const std::string &csvString) = 0;//a to przy zapisie tekstowym CSV
};

i każda z tych klas-struktur miałaby już sensowną implementację dla tych funkcji. Potem klasie FileCSV robisz jakoś tak:

void FileCSV::read(Readable &readable)
{
    readable.fromCSVFile(file.readAll());//kod podglądowy, nie wiem jakiego typu jest file
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0