[英]Aggregate initialization of noncopyable base class
我正在從不可復制的基數 class 構造派生的 class。我想在初始化程序中聚合初始化Base
:
// for convenience, could be any other way to disable copy
#include<boost/noncopyable.hpp>
struct Base: public boost::noncopyable{
int a;
};
struct Derived: public Base{
Derived(int a): Base{a} {}
};
但我得到:
error: could not convert ‘a’ from ‘int’ to ‘boost::noncopyable_::noncopyable’
據我了解, noncopyable
無法初始化,這很公平。 然后我可以以某種方式設計聚合初始化器以便跳過不可復制的初始化嗎? (我在沒有真正理解的情況下嘗試了諸如Base{{},a}
之類的東西,但這也沒有用: ~noncopyable
是受保護的)。
或者我是否需要顯式定義Base::Base
來跳過noncopyable
的初始化,使用它從Derived::Derived
而不是聚合初始化?
你試過的base class的聚合初始化
Derived(int a): Base{{}, a} {}
// ^^
如果boost::noncopyable
的構造函數未受protected
(請參閱此處),將會起作用。
最簡單的修復方法應該是向基類 class 添加一個構造函數。
#include <boost/core/noncopyable.hpp>
struct Base: private boost::noncopyable
{
int a;
Base(int a_) : a{a_} {}
};
struct Derived: public Base
{
Derived(int a): Base{a} {}
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.