我有一个A类,它派生自一个类模板B.A有一个内部类,B需要使用,如果它不能,那么设计没有实际意义。
template <typename child_t>
class B {
typename child_t::inner_t& some_func();
};
class A : public B<A> {
public:
class inner_t { };
};
然而,当我尝试这样做时,编译器告诉我A没有名为inner_t的成员。我的第一个猜测是,这是因为A只是部分定义,但这种模式一直在使用。有没有办法解决这个问题?
答案 0 :(得分:1)
有几种方法可以解决这个问题。
制作B
,A
并非必须从中获取。
template <typename child_t>
struct B1 {
typedef typename child_t::inner_t inner_t;
inner_t foo()
{
return inner_t();
}
};
struct A1
{
struct inner_t {};
};
然后,您可以像:
一样使用它B1<A1> obj1;
A1::inner_t inner = obj1.foo();
在进行函数调用之前,不要依赖A
的定义。
template <typename child_t>
struct B2 {
void foo()
{
typedef typename child_t::inner_t inner_t;
// Do something with inner_t()
}
};
struct A2 : public B2<A2>
{
struct inner_t {};
};
然后,您可以像:
一样使用它B2<A2> obj2;
obj2.foo();