2009-03-09 4 views
0

Я пытаюсь скомпилировать это:шаблон по умолчанию аргумент в шаблоне

template <class T, class U = myDefaultUClass<T> > 
class myClass{ 
... 
}; 

Хотя это кажется вполне интуитивно мне это не мой компилятор, кто-нибудь знает, как это сделать?

Редактировать: Хорошо, проблема на самом деле не исходила из этого, а из остаточной попытки ... Извините, спасибо за ваши ответы в любом случае.

ответ

6

Следующие работы для меня с помощью G ++. Пожалуйста, напишите больше кода, сообщений об ошибках, которые вы получаете, и версии компилятора.

class A {}; 

template <class T> class T1 {}; 

template <class T, class U = T1<T> > class T2 { 
}; 

T2 <A> t2; 
+0

И информация компилятора. – Anonymous

+0

Я использую g ++ также, я думаю, я слишком много пробовал, позвольте мне выяснить, почему – Ben

0

Это работает на MSVC 9.0:

template < class T > 
class UClass 
{ 
private: 
    T m_data; 
}; 

template < class T, class U = UClass<T> > 
class MyClass 
{ 
public: 
    const U& data() const { return m_data; } 
private: 

    U m_data; 
}; 


int main() 
{ 
    MyClass<int> test; 

    const UClass<int>& u = test.data(); 

    return 0; 
} 
0

Это либо, что ваш компилятор не является стандартной жалобы, или вы сделали один из этих ошибок:

  1. myDefaultUClass не шаблон
  2. myDefaultUClass не определен

, потому что следующая прекрасная в G ++ работа:

class myDefaultUClass{}; 

template <class T, class U = myDefaultUClass > 
class myClass{ 
//... 
}; 
Смежные вопросы