簡體   English   中英

不可復制基的聚合初始化 class

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM