這裏的情景:如何從類定義中將類模板作爲模板引用?
template <template <typename> class T, typename V>
struct parent {
void do_something();
};
template <typename V>
struct child : public parent<child, V> {
void do_something(V argument);
using parent<child, V>::do_something; // C3200: invalid template argument for template parameter 'IMPL', expected a class template
};
上面的代碼無法編譯在給定的錯誤給定線(MSVC 9.0)。但是,如果我寫這篇文章不是,類定義之外的child
:
template <typename V>
struct parent_identity_meta {
typedef typename parent<child, V> type; // no error!
};
我現在可以成功做到以下幾點,內child
:
using parent_identity_meta<V>::type::do_something;
我知道有一個限制(緩解了C + +11),你不能對模板進行typedef,但我不認爲這就是我在這裏遇到的情況,否則parent_identity_meta
中的typedef將會失敗。似乎child
指的是模板,當它不在其自己的類定義中時,以及類從其自身內部生成。
這是很容易理解的(不得不寫的child<V>
每一次將是痛苦的);但有沒有什麼方法可以覆蓋這種行爲?
你試過':: child'嗎? –
我無法解釋錯誤信息,但我注意到'do_something'是私人的。我認爲這也是一個問題。 – jogojapan
@SethCarnegie:爲我解決了這個問題。我不知道爲什麼。哦,其實我認爲我知道了(: – Mankarse