У меня есть шаблонный класс
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>;
не работает.
Что Вы делаете в этой ситуации? Что-нибудь, что может уменьшить многословие?
Вы можете использовать внутренний тип:
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 в будущем и хотите преодолеть разрыв. Или если вы используете его в достаточно узком контексте, чтобы макрос был не страшен.
Ничего, чтобы уменьшить многословие (кроме того, что говорит Ро).
Но хорошая статья о самой проблеме: Template Typedef.
Вам действительно понадобится этот трюк, если у вас есть какая-то родовая функция, которая ожидает, что ваш тип будет иметь некоторый связанный typedef, а ваш тип шаблонизирован (считайте, что вы предоставили result_t и он должен быть вашим шаблонным параметром!).
using tr1::shared_ptr;
должен позволить вам использовать shared_ptr
без префикса, но это все, что я знаю. Простите.