Как я могу использовать шаблонные общие ограничения в C ++ / CLI - PullRequest
4 голосов
/ 02 ноября 2011

У меня возникли проблемы с выяснением, могу ли я использовать шаблонные общие ограничения в C ++ / CLI.Вот пример

template<typename T>
public ref class wrapped 
{
public:
    T* t;

    T doTthing(){return *t;}
};

Вот простой шаблонный управляемый класс, упаковывающий неуправляемый тип T. Я могу использовать этот класс в качестве ограничения для универсального

// works
generic<class genclass> where genclass : wrapped<int>
public ref class testclass3
{
public:
    genclass gc;

    int test()
    {
        return gc->doTthing();
    }
};

. Это прекрасно работает.Чего я не могу понять, так это как сохранить шаблоны и шаблон, то есть

//Does Not Work!
template<typename T>
generic<class genclass>  where genclass : wrapped<T>
public ref class testclass4
{
public:
    genclass gc;

    T test()
    {
        return gc->doTthing();
    }
};

Возможны ли такие вещи?

1 Ответ

3 голосов
/ 09 ноября 2011

Вы не можете смешивать шаблоны с шаблонами в одном объявлении.

Класс должен быть шаблонным или общим. См .: Управляемые шаблоны

Шаблоны гораздо более выразительны, поэтому я бы посоветовал вам использовать их.

Если вы хотите смоделировать ограничение (кстати, тот же метод будет работать в c ++ ..), вы можете сделать:

template<class T, class GENCLASS>
public ref class testclass4
{
private:
    typedef typename GENCLASS::wrapped<T> Constraint1;
public:
    genclass gc;

    T test()
    {
        return gc->doTthing();
    }
};

Если класс не наследуется от wrapped<T>, то объявление typedef завершится неудачно, сообщив, что "wrapped не является членом GENCLASS".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...