Является действительным следующее ?:Вложенные возможности шаблона
template<typename T> class C { C1<C2<T>> someMember; };
Является действительным следующее ?:Вложенные возможности шаблона
template<typename T> class C { C1<C2<T>> someMember; };
Ну, вы должны были бы сделать что-то с типом, либо сделать его ЬурейеЕ или член, но да:
template <typename T>
struct C1 {};
template <typename T>
struct C2 {};
template <typename T>
struct C
{
typedef C1<C2T> > type; // note the space!
};
>>
на самом деле является оператором сдвига справа, поэтому вам нужно место для правильной работы. В C++ 0x, однако, вы можете просто ввести >>
; он разбирается просто отлично. *
* Некоторые компиляторы в настоящее время принимают его.
Erm, нет, по крайней мере, не в изоляции, поскольку у вас нет определения для C1
и C2
. Предполагая, что они определены как классы шаблонов с одним аргументом, то нет, он по-прежнему недействителен по той же причине, что int;
недействителен - это не полный оператор, его просто имя.
Теперь, если вы спрашиваете о синтаксисе с помощью угловых скобок, а затем игнорируете все другие проблемы, которые действительны только в C++ 0x. В текущем стандарте C++ синтаксический разбор неоднозначен, и вам нужно будет сформировать его как C1<C2<T> >
.
Конечно, я использовал:
vector< pair<int, int> > blah;
раньше.
Что именно вы пытаетесь достичь? – Jordan
Я отнял у него все, что могу, но это довольно плохой вопрос. Мы понятия не имеем, что такое «C1» и «C2», мы не знаем, какова ваша реальная проблема, и каковы ваши цели. Нет, это недействительно, потому что 'C1' и' C2' не определены или даже если они были такими, как я их определил, теперь это недействительно, потому что '>>' является оператором правого сдвига. И если мы вводим пробел, это неверно, потому что вы просто назвали тип и ничего не объявили. Слишком неполно; обеспечить реальный код, реальные проблемы и реальные цели, если вы хотите получить реальные ответы. – GManNickG
Ответ, который вы предоставили, является реальным. – user383352