std::enable_if beim Konstruktor?

Alles rund um die Programmierung mit Qt
Antworten
hilefoks
Beiträge: 144
Registriert: 13. März 2008 16:09

std::enable_if beim Konstruktor?

Beitrag von hilefoks »

Moin,

ich habe eine Frage zu folgendem Code-Beispiel:

Code: Alles auswählen

template<class T>
class Foo : public Base
{
public:
    explicit Foo(QObject *parent = nullptr) 
       : Base(parent)
    {
    }

private:
    T m_data;
};
Der Typ T darf hier entweder ein Pointer oder aber ein Typ mit Standardkonstruktor sein... genauer:

Code: Alles auswählen

std::is_default_constructible<T>::value || std::is_pointer<T>::value
Handelt es sich bei T nun um einen Pointer, handel ich mir hier aber einen nicht initialisierten Pointer ein.
Dieses Problem kann sicherlich mit Hilfe von SFINAE gelöst werden. Leider bekomme es gerade für den Konstruktor aber nicht hin.

Hat jemand einen Tipp für mich?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: std::enable_if beim Konstruktor?

Beitrag von Christian81 »

Code: Alles auswählen

    explicit Foo(QObject *parent = nullptr)
       : Base(parent)
       , m_data(T())
    {
    }
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
hilefoks
Beiträge: 144
Registriert: 13. März 2008 16:09

Re: std::enable_if beim Konstruktor?

Beitrag von hilefoks »

Danke Christian81. Ich habe viel zu kompliziert gedacht, da ich übersehen habe, das ich ja auch einen Pointer so initialisieren kann.
Antworten