В качестве альтернативы, и, как я уже предлагал в комментарии, вы можете использовать std::function
, так как будет проще использовать и более общие.
template <typename T>
class matrix { };
template <typename T>
class MyClass
{
public:
matrix<T> myFunction(matrix<T> const&) { return {}; }
};
template<typename T>
using calc_t = std::function<matrix<T>(matrix<T> const&)>;
int main()
{
MyClass<double> myObject;
using namespace std::placeholders; // For e.g. _1
calc_t<double> myFunction = std::bind(&MyClass<double>::myFunction, myObject, _1);
matrix<double> myFirstMatrix, mySecondMatrix;
myFirstMatrix = myFunction(mySecondMatrix);
}
Как показано выше, вы можете использовать std::bind
.Но вы также можете использовать лямбда-выражения :
calc_t<double> myFunction = [&](matrix<double> const& m)
{
return myObject.myFunction(m);
};
Или еще лучше (в любом случае, для этого простого варианта использования) использовать вывод типа
auto myFunction = [&](matrix<double> const& m)
{
return myObject.myFunction(m);
};
С лямбдами, вычитание типов и шаблоны вы можете создавать очень общий и выразительный и сложный код простым способом.