Login  Register

Re: allocating an object of abstract class type error

Posted by Jerry Jin on Jan 20, 2017; 9:22am
URL: http://quantlib.414.s1.nabble.com/allocating-an-object-of-abstract-class-type-error-tp17968p17980.html

Hi Peter

My convert program can identify some of virtual classes, like Cashflow. I guess TermStructure is the same case

Regards
Jerry
 
On Fri, 20 Jan 2017 at 5:05 PM, Peter Caspers <[hidden email]> wrote:
Hi Jerry,



not more? Or did you look at a specific subset?



For example what about TermStructure, it is abstract, but no template class.



Best Regards

Peter





On 19 January 2017 at 14:06, Jerry Jin <[hidden email]> wrote:

> Hi Peter

>

> I haven't started template classes yet, below are abstract classes I found

>

> Commodity

>

> CmsSpreadCouponPricer

>

> EquityFXVolSurface

>

> InterestRateVolSurface

>

> MarketModelComposite

>

> MultiProductMultiStep

>

> MultiProductOneStep

>

> Option

>

> DefaultDensityStructure

>

> SurvivalProbabilityStructure

>

> SwaptionVolatilityCube

>

> SwaptionVolatilityDiscrete

>

>

> Regards

> Jerry

>

> On Thu, Jan 19, 2017 at 8:19 PM, Peter Caspers <[hidden email]>

> wrote:

>>

>> Hi Jerry,

>>

>> just out of interest, can you post some statistics on that here?

>>

>> Kind Regards

>> Peter

>>

>> On 19 Jan 2017, at 03:52, Jerry Jin <[hidden email]> wrote:

>>

>> Hi Yannis

>>

>> Thank you, for now I'm using compiler to tell me which class is abstract,

>> it's not too many

>>

>> Regards

>> Jerry

>>

>> On Wed, Jan 18, 2017 at 2:07 AM, Yannis <[hidden email]> wrote:

>>>

>>> It is definitely possible using C++ metaprogramming.

>>> One strategy could be to process all classes T regardless of whether each

>>> particular class T is abstract or not.

>>> Then rather than calling new T(arg), where arg is some argument, you

>>> should call New<T>::Res::f(arg)

>>> Above New<T> is a template class that you must define in such a way that

>>> it contains a typedef called Res, which in turn is designed to equal one of

>>> the following two classes: NewDoNothing or NewDoSomething<T>.

>>> The first class NewDoNothing must contain a static method f that does

>>> nothing.

>>> The second class NewDoSomething<T>, which is a template, must contain a

>>> static method also called f that returns new T(arg).

>>> The idea is that New<T>::Res intelligently switches between NewDoNothing

>>> and NewDoSomething<T> based upon whether T is abstract or not.

>>> This intelligent switch can be easily implemented for a generic argument

>>> arg, as long as it is a single argument.

>>> I suppose this method can be generalized for any number of arguments,

>>> including the case of no arguments at all.

>>> Let me know if this is an approach you would like to follow and I could

>>> send you some code that I have that implements this switch.

>>>

>>> Regards,

>>>

>>> Ioannis

>>>

>>>

>>> Luigi Ballabio <[hidden email]> schrieb am 14:07 Donnerstag,

>>> 12.Januar 2017:

>>>

>>>

>>> No, I don't think there is.

>>>

>>>

>>> On Thu, Jan 12, 2017 at 2:02 PM Jerry Jin <[hidden email]>

>>> wrote:

>>>

>>> Hi Luigi

>>>

>>> Thanks, is there any tool or document to identify which class is abstract

>>> that I can use new to allocate memory?

>>>

>>> I'm working a wrapper program, which iterate all classes, hence it would

>>> be great to know which classes I can't do 'new' before compiling

>>>

>>> Regards

>>> Jerry

>>>

>>> On Thu, Jan 12, 2017 at 7:33 PM, Luigi Ballabio

>>> <[hidden email]> wrote:

>>>

>>> A class is abstract when it (or one of its base classes) declares a pure

>>> virtual method and doesn't define it.

>>> In your case: CmsSpreadCouponPricer inherits from

>>> FloatingRateCouponPricer, which declares a bunch of virtual methods:

>>>

>>>         virtual Real swapletPrice() const = 0;

>>>         virtual Rate swapletRate() const = 0;

>>>         virtual Real capletPrice(Rate effectiveCap) const = 0;

>>>         virtual Rate capletRate(Rate effectiveCap) const = 0;

>>>         virtual Real floorletPrice(Rate effectiveFloor) const = 0;

>>>         virtual Rate floorletRate(Rate effectiveFloor) const = 0;

>>>         virtual void initialize(const FloatingRateCoupon& coupon) = 0;

>>>

>>> so FloatingRateCouponPricer is abstract. CmsSpreadCouponPricer doesn't

>>> define them, so it's also abstract. LognormalCmsSpreadPricer inherits from

>>> CmsSpreadCouponPricer and defines them (that is, gives them actual bodies)

>>> so it's a concrete class and can be instantiated.

>>> For more details, you can probably check any C++ book.

>>>

>>> Cheers,

>>>     Luigi

>>>

>>>

>>> On Thu, Jan 12, 2017 at 4:52 AM Jerry Jin <[hidden email]>

>>> wrote:

>>>

>>> Hello, QuantLib community

>>>

>>> I'm getting error 'allocating an object of abstract class type error'

>>> sometimes while working with some classes

>>>

>>> For example:

>>>

>>> return new CmsSpreadCouponPricer(correlation);

>>>

>>> How do I know which class is abstract and can't allocate memory?

>>>

>>> Thanks!

>>>

>>> Regards

>>> Jerry

>>>

>>> ------------------------------------------------------------------------------

>>> Developer Access Program for Intel Xeon Phi Processors

>>> Access to Intel Xeon Phi processor-based developer platforms.

>>> With one year of Intel Parallel Studio XE.

>>> Training and support from Colfax.

>>> Order your platform today.

>>> http://sdm.link/xeonphi_______________________________________________

>>> QuantLib-users mailing list

>>> [hidden email]

>>> https://lists.sourceforge.net/lists/listinfo/quantlib-users

>>>

>>>

>>>

>>>

>>> ------------------------------------------------------------------------------

>>> Developer Access Program for Intel Xeon Phi Processors

>>> Access to Intel Xeon Phi processor-based developer platforms.

>>> With one year of Intel Parallel Studio XE.

>>> Training and support from Colfax.

>>> Order your platform today. http://sdm.link/xeonphi

>>>

>>> _______________________________________________

>>> QuantLib-users mailing list

>>> [hidden email]

>>> https://lists.sourceforge.net/lists/listinfo/quantlib-users

>>>

>>>

>>

>>

>> ------------------------------------------------------------------------------

>> Check out the vibrant tech community on one of the world's most

>> engaging tech sites, SlashDot.org!

>> http://sdm.link/slashdot_______________________________________________

>> QuantLib-users mailing list

>> [hidden email]

>> https://lists.sourceforge.net/lists/listinfo/quantlib-users

>>

>>

>


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
QuantLib-users mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-users