has*_*san 5 c++ inheritance constructor
"使用"私有成员变量使其成为公共成员,但构造函数保持私有.例:
class MyClass;
class Base
{
private:
Base(float v) : m_v{v} {}
float m_v;
friend MyClass;
};
class MyClass: public Base
{
public:
using Super = Base;
using Super::Super; // this is still private
using Super::m_v; // this is public
};
int main()
{
MyClass x{3.4f}; // error - calling a private constructor of class 'Base'
(void)x.m_v; // not an error
return 0;
}
Run Code Online (Sandbox Code Playgroud)
除了写这样的通用ctor之外还有其他方法吗?
template<typename... Args>
MyClass(Args&&... args) : Super(std::forward<Args>(args)...) {}
Run Code Online (Sandbox Code Playgroud)
http://en.cppreference.com/w/cpp/language/using_declaration#Inheriting_constructors包含以下段落:
它与相应的基本构造函数具有相同的访问权限。如果用户定义的构造函数满足 constexpr 构造函数要求,则它是 constexpr。如果相应的基构造函数被删除或者默认的默认构造函数被删除(除非构造函数被继承的基构造函数不计算在内),则该构造函数也会被删除。继承构造函数不能显式实例化或显式专门化。
它指的是继承的构造函数。我不知道为什么,但你的方法似乎被明确禁止。通常的解决方案是定义一个通用转发构造函数。