Вы можете передать лямбда-выражение unaryExpr
, например, так:
Eigen::Matrix<int,2,2> new_m = m.unaryExpr(
[](const Foo& x) {
return x.member_of_foo_returns_int();
});
Если вы не можете использовать c ++ 11, вам нужно написать небольшую вспомогательную функцию:
int func_wrapper(const Foo& x) {
return x.member_of_foo_returns_int();
}
и передайте это, используя std::ptr_fun
:
Eigen::Matrix<int,2,2> new_m = m.unaryExpr(std::ptr_fun(func_wrapper));
Для вызова функций-членов на самом деле уже реализована хорошая вспомогательная функция с именем std::mem_fun_ref
(она принимает указатель на функцию-член и возвращает функторобъект, который принимается unaryExpr
):
Eigen::Matrix<int,2,2> new_m = m.unaryExpr(
std::mem_fun_ref(&Foo::member_of_foo_returns_int));
Все эти варианты являются типобезопасными, т. е. попытка сохранить результат в не-1017 * -Matrix не скомпилируется.