为什么我的typedef没有继承?

时间:2014-04-22 14:03:49

标签: c++ templates inheritance typedef

我有以下代码,它们没有编译:

class A {
public:
    typedef int A_t;
};

template<class T>
class IB {
public:
    typedef typename T::A_t B_t;
    virtual B_t get() = 0;
protected:
    B_t v;
    IB(B_t in) : v(in) { }
};

template<class T>
class B : public IB<T> {
public:
    B(B_t in) : IB<T>(in) { }   // error: expected ')' before 'in'
    B_t get() { return B_t(); } // error: B_t does not name a type
};

int main() {
    B<A> a(3);  // Errors here since int can't be converted to const B& or const B&&
                // Also because A is virtual, since A::get() doesn't compile
    return 0;
}

据我所知,错误消息的主要问题是typedef IB B由于某种原因而无法在typedef IB<T>::B_t B_t;中使用。

如果我在B构造函数上方添加一行B_t,则代码编译正常,但我不明白为什么我需要这个。不应该通过继承获得B(IB<T>::B_t in) : IB<T>(in) { } // etc, with qualified references to B_t 吗?

此外,以下内容也不起作用:

B_t

产生相同的错误消息。

此处的机制是什么阻止我在B typedef使用{{1}}而没有额外的{{1}}?

0 个答案:

没有答案