Моя цель - отправить данные нескольким потокам. Это возможно, используя boost :: tee. Но я хочу написать обертку с вариационным шаблоном для использования нескольких потоков.Как объявить «неявное преобразование» в вариационном шаблоне?
Проблема в том, что мне требуется неявное преобразование из структуры потомка в структуру предка. Или что-то типа того.
#include <boost/iostreams/tee.hpp>
#include <boost/iostreams/stream.hpp>
#include <fstream>
#include <iostream>
using namespace std;
namespace bio = boost::iostreams;
using bio::tee_device;
using bio::stream;
template<typename ... Ts>
struct pu;
template<typename T1,typename T2>
struct pu<T1,T2>:public stream<tee_device<T1,T2>>
{
typedef stream<tee_device<T1,T2>> base_type;
operator base_type() { return static_cast<base_type&>(*this); }
base_type& base = static_cast<base_type&>(*this);
pu(T1& t1, T2& t2): base_type(tee_device<T1,T2>(t1,t2)) {}
};
template<typename T1,typename T2,typename T3,typename ... Ts>
struct pu<T1,T2,T3,Ts...> : public stream<tee_device<T1,pu<T2, T3, Ts ...>>>
{
typedef stream<tee_device<T1,pu<T2, T3, Ts ...>>> base_type;
operator base_type() { return static_cast<base_type&>(*this); }
pu(T1& t1, T2& t2, T3& t3, Ts& ... ts) : base_type(t2,t3,ts...){}
};
int main()
{
pu<ostream,ostream> hT(cout,cout); hT<<"2";
pu<ostream,ostream,ostream> hR(cout,cout,cout); hR<<"3";
return 0;
}
Ошибка
..\boost_1_56_0\boost\iostreams\detail\forward.hpp|73|error: no matching function for call to
'boost::iostreams::tee_device<std::basic_ostream<char>, pu<std::basic_ostream<char, std::char_traits<char> >, std::basic_ostream<char, std::char_traits<char> > > >::tee_device(std::basic_ostream<char>&, const std::basic_ostream<char>&)'|
Ожидаемый выход "22333". (У меня есть «22», но не имеют «333». Т.е. это хорошо работать без второй линии основной)
Другими словами, мне нужно преобразование из
template<typename T1,typename T2,typename T3,typename ... Ts>
к
stream<tee_device<T1,pu<T2, T3, Ts ...>>>
внутри шаблона.
Спасибо!
p.s. (Это мой первый пост) & & (я не родной динамик)
Thanx, но у меня абсолютно такой же проблема с ним. ** \ boost \ iostreams \ detail \ forward.hpp | 73 | ошибка: нет подходящей функции для вызова boost: iostreams :: tee_device, pu >, std :: basic_ostream >>> :: tee_device (std :: basic_ostream &, const pu >, std :: basic_ostream >> &) '| ** –
ged
@GeorgeDunaev Отредактировано. – Oktalist