Seite 1 von 1

std::enable_if beim Konstruktor?

Verfasst: 5. Juni 2016 11:32
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?

Re: std::enable_if beim Konstruktor?

Verfasst: 6. Juni 2016 18:10
von Christian81

Code: Alles auswählen

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

Re: std::enable_if beim Konstruktor?

Verfasst: 6. Juni 2016 22:48
von hilefoks
Danke Christian81. Ich habe viel zu kompliziert gedacht, da ich übersehen habe, das ich ja auch einen Pointer so initialisieren kann.