_baseclass是什么意思在下面的代码中

时间:2018-03-01 16:19:48

标签: c++ inheritance

我有一些像这样的代码

class A : public b<T>
{
public:
    typedef b<T> _baseclass; // why we need this declaration 
};

这里的_baseclass是什么?

1 个答案:

答案 0 :(得分:1)

此成员类型也将在类定义的中可用,这在模板代码中很方便。如果您将A传递给函数模板,或者其他一些也有_baseclass个成员类型的类,那么您可以使用_baseclass找出基础是什么而不需要知道究竟是什么顶级类型。

std::vectorstd::map等标准模板的成员类型如value_type - 这些类型不代表基类,但具有相似的目的,因为您可以使用value_type无论使用哪个容器,都可以在任何地方使用容器。

typedef换成using(因为我想),这是一个例子:

// The class templates

template <typename T>
struct Base {};

struct A : Base<int>
{
    using base_class = Base<int>;
};

struct B : Base<char>
{
    using base_class = Base<char>;
};

struct C : Base<bool>
{
    using base_class = Base<bool>;
};


// The example

template <typename T>
void foo()
{
    // typename needed because base_class is a "dependent name"
    // (just go with it)
    typename T::base_class the_base;

    // This line is to suppress "unused variable" warnings
    (void)the_base;
}

int main()
{
   foo<A>();
   foo<B>();
   foo<C>();
}

虽然这个特定的程序实际上并没有“做任何事情”,但是它显示了一个函数模板foo,它可以“知道”每种情况下基类是什么,而没有关于究竟是什么{{1是的。它适用于您添加了T成员类型的任何类!