C++ обработал определение типа по шаблону

У меня есть шаблонный класс

template <T>
class Example 
{
...
};

внутри, который существует много методов следующего типа:

template <class U> <class V> method(....)

В них я использую tr1:: shared_ptr к U или V или T.

Его утомительный ввод tr1::shared_ptr<const U> или tr1::shared_ptr<const V>.

Очевидная вещь сделать:

template <typename U>
typedef tr1::shared_ptr<U> shptr<U>;

не работает.

Что Вы делаете в этой ситуации? Что-нибудь, что может уменьшить многословие?

5
задан user231536 10 February 2010 в 17:23
поделиться

3 ответа

Вы можете использовать внутренний тип:

template <typename U>
struct sptr {
    typedef tr1::shared_ptr<U> t;
};

Тогда скажем sptr::t, или, к сожалению, часто typename sptr::t.

В C++0x есть шаблонные типизации, вы можете проверить, можно ли убедить ваш компилятор принять их:

template<typename U>
using sptr = tr1::shared_ptr<U>;

Тогда скажите sptr

И, конечно, всегда есть #define sptr ::tr1::shared_ptr, например, если вы ожидаете C++0x в будущем и хотите преодолеть разрыв. Или если вы используете его в достаточно узком контексте, чтобы макрос был не страшен.

9
ответ дан 13 December 2019 в 05:34
поделиться

Ничего, чтобы уменьшить многословие (кроме того, что говорит Ро).

Но хорошая статья о самой проблеме: Template Typedef.

Вам действительно понадобится этот трюк, если у вас есть какая-то родовая функция, которая ожидает, что ваш тип будет иметь некоторый связанный typedef, а ваш тип шаблонизирован (считайте, что вы предоставили result_t и он должен быть вашим шаблонным параметром!).

2
ответ дан 13 December 2019 в 05:34
поделиться
using tr1::shared_ptr;

должен позволить вам использовать shared_ptr без префикса, но это все, что я знаю. Простите.

1
ответ дан 13 December 2019 в 05:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: