Date: Mon, 28 Nov 2022 13:38:44 -0800
On Monday, 28 November 2022 12:34:55 PST Marcin Jaczewski via Std-Proposals
wrote:
> > protected:
> > std::tuple<Bases*...> pointers;
>
> If we need 10 bases this class could be bigger than the original object.
> Probably a better solution would be to store an offset in some static
> memory and add this offset to the `void*` pointer.
Such a concept already exists: it's called "base class". If you store a common
ancestor to all the bases, then you can dynamic_cast from it to the requested
base and the operator will do the necessary verifications and pointer
adjustments for you.
Of course, this requires that there is a common ancestor (that is, a diamond
inheritance pattern). If instead the classes are in a multi-root hierarchy, it
won't work. Your idea of generating a static function would:
> chimeric_ptr(T* ptr) : offset{ [p = ptr](int i) { switch(i) {
> case 0: return (void*)static_cast<BaseA*>(p); case 1: return
> (void*)static_cast<BaseB*>(p); } } }
I'd just make it stateless (don't capture ptr).
wrote:
> > protected:
> > std::tuple<Bases*...> pointers;
>
> If we need 10 bases this class could be bigger than the original object.
> Probably a better solution would be to store an offset in some static
> memory and add this offset to the `void*` pointer.
Such a concept already exists: it's called "base class". If you store a common
ancestor to all the bases, then you can dynamic_cast from it to the requested
base and the operator will do the necessary verifications and pointer
adjustments for you.
Of course, this requires that there is a common ancestor (that is, a diamond
inheritance pattern). If instead the classes are in a multi-root hierarchy, it
won't work. Your idea of generating a static function would:
> chimeric_ptr(T* ptr) : offset{ [p = ptr](int i) { switch(i) {
> case 0: return (void*)static_cast<BaseA*>(p); case 1: return
> (void*)static_cast<BaseB*>(p); } } }
I'd just make it stateless (don't capture ptr).
-- Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org Software Architect - Intel DCAI Cloud Engineering
Received on 2022-11-28 21:38:47