как выкрутится с такой ситуации:
есть класс, методы в котором могут делать log-записи
я хочу что бы в класс в конструктор передавалась переменная у которой есть оператор <<, а класс использовал то что ему подсунули для записи этих самых log-записей
причем переменная с оператором << может быть хоть std::cout, std:

fstream хоть мой собственный класс.
то есть я хочу что-то такое:
Код:
class A
{
public:
A(Log_system& log):_log(log){};
Log_system& _log;
void test_log()
{
this->_log<<"Test log system"<<std::endl;
}
};
----------------------
#include <iostream>
int main()
{
A testA(std::cout);
testA.test_log();// std::cout<<"Test log system"<<std::endl;
}
кто какие варианты использования шаблонов предложит?(нужно сделать из Log_system некий рабочий шаблон)
и еще
нельзя что бы класс инициировался как A<log_system_type> instanceA(....);
должно быть просто A instanceA(...);
такой вариант НЕ подходит:
Код:
#include <iostream>
using namespace std;
template<class LG> class A
{
public:
A(LG &log_system):log(log_system){};
LG &log;
void test_log()
{
this->log<<"Test log system"<<endl;
}
};
int main()
{
A<ostream> testA(cout);
testA.test_log();
return 0;
}
была мысли еще тип Log-системы написать просто в #define и использовать одинаковый тип для всех экземпляров класса, но хотелось бы больше гибкости
Хотелось бы такого:
Код:
#include <iostream>
using namespace std;
class A
{
public:
template<class LG> A(LG &log_system):log(log_system){};
template<class LG> LG &log;
void test_log()
{
this->log<<"Test log system"<<endl;
}
};
int main()
{
A testA(cout);
testA.test_log();
return 0;
}
но не работает
