Hi,
I have a simple inheritance:
class
A {};
class
RegressionTestScenario;
typedef
A CurveGen;
typedef
boost::shared_ptr<CurveGen>
CurveGenPtr;
typedef
boost::function<void
(RegressionTestScenario*, const
std::string &)> actionFuntion;
typedef
boost::shared_ptr<actionFuntion>
actionFuntionPtr;
class
RegressionTestScenario
{
public:
virtual
~RegressionTestScenario() {}
virtual
void
doScenario() = 0;
virtual
boost::shared_ptr<std::string> fileName() const
= 0;
virtual
boost::shared_ptr<std::string> print() const
= 0;
virtual
void
unwrapPackage(const
std::string &contents) = 0;
protected:
typedef
std::vector<std::pair<actionFuntionPtr, std::string> > actionCollection;
actionCollection
m_actionCollection;
};
class
CurveGenRegressionTestScenario : public
RegressionTestScenario
{
public:
virtual
void
doScenario();
virtual
boost::shared_ptr<std::string> fileName() const;
virtual
boost::shared_ptr<std::string> print() const;
virtual
void
unwrapPackage(const
std::string &contents);
private:
CurveGenPtr
m_curveGenPtr;
void
addAction(const
std::string &action);
void
changeBaseDate(const
std::string &argument);
void
changeStvParameter(const
std::string &argument);
void
changeLtvParameter(const
std::string &argument);
void
changeHalfLife(const
std::string &argument);
void
changeParameterSet(const
std::string &argument);
void
changeCurrencyCouple(const
std::string &argument);
};
and I am trying to use the following:
actionFuntion
funPtr;
if(params[0]=="BaseDate")
funPtr = &CurveGenRegressionTestScenario::changeBaseDate;
but it fails. I have no idea why. Could
someone give me a hint? This is the output from the compiler:
Cheers
1>------ Build started: Project:
compare, Configuration: Release Win32 ------
1>Compiling...
1>RegressionTestMain.cpp
1>D:\Dev\SOHO_NEW\Thirdparty\boost/bind/mem_fn_template.hpp(156)
: error C2440: 'newline' : cannot convert from 'RegressionTestScenario
*' to 'CurveGenRegressionTestScenario *'
1> Cast
from base to derived requires dynamic_cast or static_cast
1> D:\Dev\SOHO_NEW\Thirdparty\boost/bind/mem_fn_template.hpp(171)
: see reference to function template instantiation 'R boost::_mfi::mf1<R,T,A1>::call<U,const
std::string>(U &,const void *,B1 &) const' being compiled
1> with
1> [
1>
R=void,
1>
T=CurveGenRegressionTestScenario,
1>
A1=const std::string &,
1>
U=RegressionTestScenario *,
1>
B1=const std::string
1> ]
1> D:\Dev\SOHO_NEW\Thirdparty\boost/function/function_template.hpp(225)
: see reference to function template instantiation 'R boost::_mfi::mf1<R,T,A1>::operator
()<T0>(U &,A1) const' being compiled
1> with
1> [
1>
R=void,
1>
T=CurveGenRegressionTestScenario,
1>
A1=const std::string &,
1>
T0=RegressionTestScenario *,
1>
U=RegressionTestScenario *
1> ]
1> D:\Dev\SOHO_NEW\Thirdparty\boost/function/function_template.hpp(222)
: while compiling class template member function 'void boost::detail::function::function_void_mem_invoker2<MemberPtr,R,T0,T1>::invoke(boost::detail::function::function_buffer
&,T0,T1)'
1> with
1> [
1>
MemberPtr=void (__thiscall CurveGenRegressionTestScenario::* )(const
std::string &),
1>
R=void,
1>
T0=RegressionTestScenario *,
1>
T1=const std::basic_string<char,std::char_traits<char>,std::allocator<char>>
&
1> ]
1> D:\Dev\SOHO_NEW\Thirdparty\boost/function/function_template.hpp(913)
: see reference to class template instantiation 'boost::detail::function::function_void_mem_invoker2<MemberPtr,R,T0,T1>'
being compiled
1> with
1> [
1>
MemberPtr=void (__thiscall CurveGenRegressionTestScenario::* )(const
std::string &),
1>
R=void,
1>
T0=RegressionTestScenario *,
1>
T1=const std::basic_string<char,std::char_traits<char>,std::allocator<char>>
&
1> ]
1> D:\Dev\SOHO_NEW\Thirdparty\boost/function/function_template.hpp(722)
: see reference to function template instantiation 'void boost::function2<R,T0,T1>::assign_to<Functor>(Functor)'
being compiled
1> with
1> [
1>
R=void,
1>
T0=RegressionTestScenario *,
1>
T1=const std::basic_string<char,std::char_traits<char>,std::allocator<char>>
&,
1>
Functor=void (__thiscall CurveGenRegressionTestScenario::* )(const
std::string &)
1> ]
1> D:\Dev\SOHO_NEW\Thirdparty\boost/function/function_template.hpp(1065)
: see reference to function template instantiation 'boost::function2<R,T0,T1>::function2<void(__thiscall
CurveGenRegressionTestScenario::* )(const std::string &)>(Functor,int)'
being compiled
1> with
1> [
1>
R=void,
1>
T0=RegressionTestScenario *,
1>
T1=const std::basic_string<char,std::char_traits<char>,std::allocator<char>>
&,
1>
Functor=void (__thiscall CurveGenRegressionTestScenario::* )(const
std::string &)
1> ]
1> D:\Dev\SOHO_NEW\Thirdparty\boost/function/function_template.hpp(1105)
: see reference to function template instantiation 'boost::function<Signature>::function<void(__thiscall
CurveGenRegressionTestScenario::* )(const std::string &)>(Functor,int)'
being compiled
1> with
1> [
1>
Signature=void (RegressionTestScenario *,const std::string &),
1>
Functor=void (__thiscall CurveGenRegressionTestScenario::* )(const
std::string &)
1> ]
1> .\RegressionTestMain.cpp(182)
: see reference to function template instantiation 'boost::function<Signature>
&boost::function<Signature>::operator =<void(__thiscall CurveGenRegressionTestScenario::*
)(const std::string &)>(Functor)' being compiled
1> with
1> [
1>
Signature=void (RegressionTestScenario *,const std::string &),
1>
Functor=void (__thiscall CurveGenRegressionTestScenario::* )(const
std::string &)
1> ]
1>D:\Dev\SOHO_NEW\Thirdparty\boost/bind/mem_fn_template.hpp(156)
: error C2647: '->*' : cannot dereference a 'void (__thiscall CurveGenRegressionTestScenario::*
const )(A1)' on a 'RegressionTestScenario *'
1> with
1> [
1>
A1=const std::string &
1> ]
1>Build log was saved at "file://d:\Dev\OwnProgs\compare\compare\Release\BuildLog.htm"
1>compare - 2 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed,
0 up-to-date, 0 skipped ==========
___________________________________________________________
This e-mail may contain confidential and/or privileged information. If you are not the intended recipient (or have received this e-mail in error) please notify the sender immediately and delete this e-mail. Any unauthorised copying, disclosure or distribution of the material in this e-mail is prohibited.
Please refer to http://www.bnpparibas.co.uk/en/information/legal_information.asp?Code=ECAS-845C5H for additional disclosures.