Как реализовать вызов функции правильно?

#include <iostream>
#include <list>

using namespace std;

class Date{
    private:
        int day, month, year;
    public:
    Date(int a, int b, int c):day(a), month(b), year(c){
    };
};
template <typename T>
void SlianyeAndPrint(list<T> &lst, list<T> &lst1)
{
    for (auto i = lst1.cbegin(); i != lst1.cend(); ++i) {
      lst.insert(lst.cend(), *i);
    };
    list<int>::iterator itr1, itr2;
    itr1=lst1.begin();
    itr2=lst1.begin();
    advance(itr2, lst1.size());
    lst1.erase(itr1, itr2);
    for (auto i = lst.cbegin(); i != lst.cend(); ++i){
        cout<<*i<<endl; 
    };
};
 
int main()
{
    list<int> Mylist = {1,2,3};
    list<int> Mylist1 = {1,2,3};
    SlianyeAndPrint(Mylist, Mylist1);

    
    return 0;
}

Есть у меня класс Date с полями day, month, year, так же шаблонная функция. Первый вызов функции реализовать для одного из встроенных типов(вроде я это сделал). Второй - для моего класса. Как это правильно реализовать?


Ответы (1 шт):

Автор решения: Harry

Дописать оператор <<, немного подправить функцию. Примерно так:

#include <iostream>
#include <list>

using namespace std;

class Date{
    private:
        int day, month, year;
    public:
        Date(int a, int b, int c):day(a), month(b), year(c){
        };
        friend ostream& operator<<(ostream&os,const Date& d)
        {
            return os << d.day << "." << d.month << "." << d.year;
        }

};



template <typename T>
void SlianyeAndPrint(list<T> &lst, list<T> &lst1)
{
    for (auto i = lst1.cbegin(); i != lst1.cend(); ++i) {
      lst.insert(lst.cend(), *i);
    };
    typename list<T>::iterator itr1, itr2;
    itr1=lst1.begin();
    itr2=lst1.begin();
    advance(itr2, lst1.size());
    lst1.erase(itr1, itr2);
    for (auto i = lst.cbegin(); i != lst.cend(); ++i){
        cout<<*i<<endl; 
    };
};
 
int main()
{
    list<int> Mylist = {1,2,3};
    list<int> Mylist1 = {1,2,3};
    SlianyeAndPrint(Mylist, Mylist1);

    list<Date> mylist  = {{1,5,1925},{22,6,2022}};
    list<Date> mylist1 = {{19,5,1963},{12,4,1962}};
    SlianyeAndPrint(mylist, mylist1);
    
    return 0;
}
→ Ссылка