Что такое C ++ / CLI эквивалентно C # по умолчанию (T)? - PullRequest
15 голосов
/ 26 декабря 2009

Я работаю с некоторым кодом C ++ / CLI (новый синтаксис) и пытаюсь объявить универсальный тип и хочу установить для переменной-члена значение по умолчанию.

В C #:

class Class<T>
{ 
    T member = default(T);
}

Что такое эквивалент в CLI?

generic<typename T> public ref class Class 
{
public:
    Class() : member(default(T))  // <-- no worky
    {
    }    
private:
        T member;
};

Ответы [ 2 ]

11 голосов
/ 26 декабря 2009

Интересно, что синтаксис выглядит так: T(). Требуется добавление конструктора копирования.

generic<typename T> 
    public ref class Class 
{
public:
    Class() : member(T())  
    {
    } 

    Class(Class^ c)
    {
        member = c->member;
    }

private:
    T member;
};

Редактировать DOH Это тоже работает (я так долго был в C #, что я забыл, что NULL и 0 - это одно и то же в C ++, поэтому нет необходимости в разных значениях по умолчанию и ссылочных типах):

generic<typename T> 
    public ref class Class 
{
public:
    Class() : member(0)  
    {
    } 

    Class(Class^ c)
    {
        member = c->member;
    }

private:
    T member;
};
1 голос
/ 26 декабря 2009

Но не закрытый ли член уже инициализирован конструктором по умолчанию?

...