爲什麼類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