const std::function< T() >& single;
const std::function< T() >& halfDozen;
Ваши члены являются ссылками на const
, но вы инициализируете их из временного конструктора (при условии, что выражения bind
в вашем коде real не являются бессмысленными).Как только строительство завершено, они становятся недействительными.Это действительно то, что вы намеревались?
Может быть, это то, что вы хотите сделать (используя здесь психические силы):
template< typename T >
class X
{
public:
X() : single( std::bind( &X::numberedFunction, this, 1 ) ),
halfDozen( std::bind( &X::numberedFunction, this, 6 ) )
{ ... }
T numberedFunction( unsigned int i ) { ... }
const std::function< T() > single;
const std::function< T() > halfDozen;
};
Обратите внимание, что я привязан к this
не *this
.Это позволяет избежать копирования, но может оказаться не тем, что вы хотите.