Инициализация через прокси структуру без initializer_list и
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 15.11.18 22:30
Оценка:
Здравствуйте!

Компилятор С++ 11, но без библиотек 11ого стандарта. Keil, мать его.

// SPL sim

struct RawDeviceStruct
{
    unsigned reg1;
    
}; // struct RawDeviceStruct

typedef RawDeviceStruct* RawDevice;

RawDevice DEV1 = (RawDevice)0x01;

// End of SPL sim
    
struct DeviceConfig
{
    RawDevice       device;
      unsigned        pin;
};

class Device
{
    private:
    Device(); // = delete
    Device( const Device &d ); // = delete
        
    
public:
    
    //Device() = delete;
    //Device( const Device &d ) = delete;

    // Err2
    Device( RawDevice d, unsigned p )
            : m_cfg()
        {
            m_cfg.device = d;
            m_cfg.pin    = p;
        }

    Device( const DeviceConfig &cfg )
            : m_cfg(cfg)
        {}
            
      void operator=( const DeviceConfig &cfg )
        {
            m_cfg = cfg;
        }
            
            

    
protected:
      DeviceConfig  m_cfg;

}; // class Device




int main()
{
    static volatile Device device1( { DEV1, 4 } );        
        static volatile Device device2 = { DEV1, 4 }; // Err1
}


Если закоментировать конструктор Err2, то получаю:

structs.cpp(66): error: #289: no instance of constructor "Device::Device" matches the argument list
argument types are: (RawDevice, int)
static volatile Device device2 = { DEV1, 4 }; // Err1


Если конструктор Err2 не закоментирован, то получаю:

structs.cpp(65): error: #309: more than one instance of constructor "Device::Device" matches the argument list:
function "Device::Device(const Device &)"
function "Device::Device(const DeviceConfig &)"
argument types are: ({...})
static volatile Device device1( { DEV1, 4 } );



Класс Device очень не хочу разрешать копировать. Есть идеи?

ЗЫ Может смотреть в сторону конструктора перемещения, благо он вроде компилятором поддерживается?
Маньяк Робокряк колесит по городу
Отредактировано 15.11.2018 22:33 Marty . Предыдущая версия .
Re: Инициализация через прокси структуру без initializer_list и
От: Constructor  
Дата: 16.11.18 06:54
Оценка: +1
Здравствуйте, Marty, Вы писали:

M>Класс Device очень не хочу разрешать копировать. Есть идеи?


Уберите Err2 и вместо

static volatile Device device2 = {DEV1, 4};

пишите

static volatile Device device2 = {{DEV1, 4}};
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.