这是场景:
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,但我认为这不是我在这里遇到的问题,否则 typedef inparent_identity_meta
会失败。当不在其自己的类定义中时,它似乎是child
指模板,并且是从其自身内部生成的类。
这是可以理解的(child<V>
每次都要写会很痛苦);但是有什么办法可以覆盖这种行为吗?