The main question is : is it possible to avoid an explicit constructor call (not the default) for each virtual base class?
Background . I am working on some types of C ++ shell classes for Windows COM objects. My current approach is to have a CBaseCOMWrapper class that encapsulates an IUnknown object for reference counting. Then I have a CCOMWrapper template class that inherits from CBaseCOMWrapper , which defines a wrapper for certain COM types (i.e. IDXGIObject , ID3D11Device , etc.). Finally, individual classes inherit from these wrapper templates to provide actual / additional functionality (i.e. CDXGIObject , CD3D11Device ).
For example, I have the following classes (members omitted):
class CBaseCOMWrapper { }; template<typename T> // here, T should inherit from IUnknown class CCOMWrapper : public virtual CBaseCOMWrapper { }; class CDXGIObject : public virtual CCOMWrapper<IDXGIObject> { }; template<> class CCOMWrapper<IDXGIAdapter> : public virtual CCOMWrapper<IDXGIObject> { }; class CDXGIAdapter : public virtual CCOMWrapper<IDXGIAdapter> { };
Here's the corresponding type hierarchy diagram:

The left column is the actual objects, the middle column is the thin COM wrappers, and the right column is the actual COM objects. Solid arrows indicate inheritance, and dotted arrows indicate encapsulation.
I use specialized CCOMWrapper templates to provide parent-child relationships in the middle.
Problem : wrapper classes accept a non-NULL (aka valid) pointer to a COM object, so I cannot have a default constructor. Since the hierarchy is filled with βdiamonds,β most of the inheritance is virtual; this means that every constructor of the class must call the constructor. So, in the above example, the CDXGIAdapter constructor should call the CCOMWrapper<IDXGIAdapter> , CDXGIObject , CCOMWrapper<IDXGIObject> and CBaseCOMWrapper . As the hierarchy expands (i.e., the ID3D11Predicate inheritance chain has a length of 4 words), this means that more constructors need to be named.
Possible solution . Ideally, I would like to use macros to generate most of the calls to the base constructor, but I would need to provide an entire inheritance chain for each COM object; this will require different macros for chains of different lengths. However, the longest such length is 4 (I only work with DXGI, D3D11 and D2D1), so this is out of the question.
So how can I avoid calling all the constructors? Also, is there a better way to achieve what I'm trying to do?