I am getting compiler error using boost::function and boost::numeric::ublas as
function return value. I am sure I am not declaring something right, but I
can't quite catch where (probably the "const" member function specifier).
Any help will be greatly appreciated.
Code to reproduce the problem is shown below. If
#include <vector>
#include
#include
using namespace boost::numeric::ublas;
class Foo
{
public:
int bar() const
{
return 1;
}
const matrix<double>& stdev() const
{
return _stdev;
}
private:
matrix<double> _stdev;
};
typedef std::vector<Foo> container;
class invoker
{
public:
invoker (container* cont,
boost::function t) : f(t), _cont(cont)
{
for (container::iterator it = _cont->begin();
it != _cont->end(); ++it)
{
Foo& foo = *it;
int i = f(&foo);
}
}
// compiler generates error if following code
// is uncomennted together with the call in _tmain
// invoker (container* cont,
// boost::function fmatrix)
// : _fmatrix(fmatrix), _cont(cont)
// {
// for (container::iterator it = _cont->begin();
// it != _cont->end(); ++it)
// {
// Foo& foo = *it;
// const matrix<double>& stddev = _fmatrix(&foo);
// }
// }
private:
boost::function f;
boost::function _fmatrix;
container* _cont;
};
int _tmain(int argc, _TCHAR* argv[])
{
container lst (5);
std::fill(lst.begin(), lst.begin() + 5, Foo());
invoker invbar(&lst, &Foo::bar);
// uncomment this line together with method in "invoker" to generate error
// invoker invstdev(lst, &Foo::stdev);
return 0;
}