我试图在我的成员初始化列表中初始化一个以上成员的集合,我不确定语法。**是我得到语法错误的地方(当然没有**)。谢谢。下面是一个例子:
//=============================================================================
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
如果您可以使用Boost Assign库,那么您要求的事情很容易:
#include <boost/assign/list_of.hpp>
...
mCapabilities(boost::assign::list_of(1)(2))
...
我刚刚在MSVC8上测试了它,它工作得很好。
在set
中没有这样的构造函数,您可以使用它来插入元素。您需要在构造函数体中显式调用set::insert
方法。也就是说,你需要做mCapabilities.insert(1);mCapabilities.insert(2);
与标准容器一样,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 )
{ }
最后一点:你的格式化非常占用空间,因此需要大量的滚动来阅读代码。您应该问问自己,虚假的分隔符注释和多余的换行符是否真的有助于提高可读性。通常情况下,我们建议不要滚动屏幕来阅读一段连接的代码。set<int>::set()
不接受您提到的参数。要查看构造函数的可能方法,可以参考set构造函数的示例。