为什么类D
编译,但C
类不?从C++中的私有模板类继承构造函数
class A
{
public:
A(int) {}
};
template <class T>
class B : private T // Note: private base class
{
public:
using T::T;
};
class C : public B<A>
{
public:
C() : B<A>(123) {} // Error: 'class A A::A' is inaccessible
}; // within this context
using BA = B<A>;
class D : public BA
{
public:
D() : BA(123) {} // OK
};
我用GCC,Clang和Visual C++测试过,它们都是一样的。 将class B : private T
更改为public T
可解决此问题。但为什么? (请注意,using T::T
是public
)
我已经添加了“模板”标签来吸引人物。请直接批评我的“标记垃圾邮件”。 – Bathsheba
如果你用'B(123)'代替'B (123)',它会编译,如果你编制了'C'模板并且使用'B',它也会编译。 –
Holt
这将证明模板标签,实际上类模板中的名称查找略有不同。 – MSalters