C ++ Set MIL Вопрос - PullRequest
       5

C ++ Set MIL Вопрос

2 голосов
/ 11 апреля 2011

Я пытаюсь инициализировать набор с более чем одним членом в моем списке инициализации участника, и я не уверен в синтаксисе.**, где я получаю синтаксическую ошибку (без **, конечно).Благодарю.Вот пример:

//=============================================================================
class myClass_t
{
//-----------------------------------------------------------------------------
public: // FUNCTIONS
//-----------------------------------------------------------------------------

    //-------------------------------------------------------------------------
    // Constructor
    myClass_t
        (
        )
    :
        BaseClass_t( IDD_BASEPAGE ),
        **mCapabilities( 1, 2 ),
        mDevice( mCapabilities )
    {
    }

    //-------------------------------------------------------------------------
    // Destructor
    ~myClass_t
        (
        )
    {
    }

//-----------------------------------------------------------------------------
private: // DATA
//-----------------------------------------------------------------------------

    fdx::myDevice_t               mDevice;    
    std::set<int>                 mCapabilities;

}; // end of class

} // end of namespace

Ответы [ 4 ]

2 голосов
/ 11 апреля 2011

Если вы можете использовать библиотеку Boost Assign, вам нужно просто:

#include <boost/assign/list_of.hpp>
...
mCapabilities(boost::assign::list_of(1)(2))
...

Я только что проверил ее на MSVC8, и она отлично работает.

1 голос
/ 11 апреля 2011

В set нет такого конструктора, с помощью которого вы можете вставлять элементы. Вам необходимо явно вызвать метод set::insert в теле конструктора. то есть вам нужно сделать mCapabilities.insert(1);mCapabilities.insert(2);.

0 голосов
/ 11 апреля 2011

set<int>::set() не принимает аргументы, которые вы упомянули. Чтобы увидеть возможные пути конструкторов, вы можете обратиться к примеру конструктора set .

0 голосов
/ 11 апреля 2011

set, как и стандартные контейнеры, предоставляет конструктор, который принимает диапазон итератора для ввода в коллекцию.

Таким образом, вы не можете напрямую помещать элементы, которые вы хотите вставить в конструктор, новы можете иметь статический массив и использовать его для инициализации членов:

class myClass_t {
    static int const m_init_values[];
    static unsigned const m_init_size;
    …
};

int const myClass_t::m_init_values[] = { 1, 2 };
unsigned const myClass_t::m_init_size =
    sizeof m_init_values / sizeof m_init_values[0];

Обратите внимание, что вам нужно определить статическую константу вне класса, как показано здесь.

Теперь вы можете использовать эти значения в конструкторе:

myClass_t()
    : BaseClass_t(IDD_BASEPAGE)
    , mCapabilities(&m_init_values, &m_init_values + m_init_size)
    , mDevice( mCapabilities )
{ }

Последнее замечание: ваше форматирование очень занимает много места и, следовательно, требует много прокрутки для чтения кода,Вы должны спросить себя, действительно ли ложные комментарии-разделители и избыточные разрывы строк действительно помогают читабельности.Обычно рекомендуется не прокручивать, чтобы прочитать один связанный код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...