嗯,总的来说,目标就是在函数中可以传输我的类的对象,或者cout | CIN。
MyStream mout = MyStream();
MyStream min = MyStream();
...
static int UShowTFileList(ostream& out, istream& in);
...
UShowTFileList(cout, cin);
UShowTFileList(mout,min);
显而易见的解决方案不起作用。没有构造函数。
class MyStream : public ostream, public istream {...}
...
MyStream mout = MyStream();
MyStream min = MyStream();
...
-->
Error (active) E1790 the default constructor of "MyStream" cannot be referenced -- it is a deleted function
嗯,所有挑战也是如此。
mout << "Hello, world!" << "\n";
->
Error C2280 'MyStream::MyStream(const MyStream &)': attempting to reference a deleted function
一般来说,如何正确继承istream,ostream? MyStream.h
答案 0 :(得分:2)
您遇到的问题是std::ostream
和std::streambuf*
都没有无效的构造函数,它们都需要Mystream
参数。因此std::fstream
不能有默认的构造函数,你必须编写一个。 std::stringstream
和std::streambuf
使用std::filebuf
,std::stringbuf
和std::iostream
的相关子类执行此操作。我建议你也提供一个streambuf子类。
请注意,您也可以继承std::basic_*<char, std::char_traits<char>>
,它已经是一个组合的输入/输出流。另请注意,我提到的所有这些名称都是template <Char = char, Traits = std::char_traits<Char>> class MyStream : std::basic_iostream<Char, Traits>{ ... }
的类型别名,您可以轻松地推广到/**
* @param User $user
* @param String $column
* @return array
*/
public function getStatsByDQL(User $user, String $column)
{
$midNight = date_create('00:00:00')->format('Y-m-d H:i:s');
$em2 = $this->getDoctrine()->getManager()->getRepository('AppBundle:ExerciseStats')
->createQueryBuilder('g')
->setParameters(array(
'user' => $user, 'column' => $column, 'date' => $midNight,
))
->where('user = :user', 'g.timestamp < :date', 'column =
:column')
->select('g.column')
->setMaxResults(1)
->join('g.user', 'user')
->orderBy('g.column','DESC')
->getQuery()->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);
return $em2;