I would like to define a function taking 2 arguments
 double func(double t, double x); 
where the actual implementation is read from an external text file.
For example, specifying in the text file 
function = x*t;    
the function should implement the multiplication between x and t, so that it could be called at a later stage.
I'm trying to parse the function using boost::spirit. But I do not know how to actually achieve it.
Below, I created a simple function that implements the multiplication. I bind it to a boost function and I can use it. I also created a simple grammar, which parse the multiplication between two doubles.
#include <boost/config/warning_disable.hpp>
#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/phoenix.hpp>
#include "boost/function.hpp"
#include "boost/bind.hpp"
#include <boost/spirit/include/qi_symbols.hpp>
#include <iostream>
#include <string>
namespace qi = boost::spirit::qi;
namespace ascii=boost::spirit::ascii;
using boost::spirit::ascii::space;
using boost::spirit::qi::symbols;
template< typename Iterator >
struct MyGrammar : public virtual qi::grammar<  Iterator,  ascii::space_type >
{
    MyGrammar() : MyGrammar::base_type(expression)
    {
        using qi::double_;
        //The expression should take x and t as symbolic expressions
        expression = (double_ >> '*' >> double_)[std::cout << "Parse multiplication: " << (qi::_1 * qi::_2)];
     }
     qi::rule<Iterator, ascii::space_type> expression;
 };
double func(const double a, const double b)
{
    return a*b; //This is the operation to perform
}
int main()
{
    typedef std::string::const_iterator iterator_Type;
    typedef MyGrammar<iterator_Type> grammar_Type;
    grammar_Type calc; 
    std::string str = "1.*2."; // This should be changed to x*t
    iterator_Type iter = str.begin();
    iterator_Type end = str.end();
    bool r = phrase_parse(iter, end, calc, space);
    typedef boost::function < double ( const double t,
                                       const double x) > function_Type;
    function_Type multiplication = boost::bind(&func, _1, _2);
    std::cout << "\nResult: " << multiplication( 2.0, 3.0) << std::endl;
    return 0;
}
If I modify the above code setting
std::string str = "x*t";
how can I parse such an expression and bind it to the function multiplication such that, if I call multiplication(1.0, 2.0), it associates  t to 1.0, x to 2.0 and it returns the result of the operation?
 
     
    