According to Sarien Answer:
class MaskCreator
{
public:
MaskCreator& AddRange(int from,int to){
for(int i= from; i<=to; ++i){
m_list.push_back(i);
}
return *this;
}
MaskCreator& Add(int i){
m_list.push_back(i);
return *this;
}
MaskCreator& AddMulti( varargstuff ){
m_list.push_back(i);
return *this;
}
unsigned int GetMask();
private:
vector<int> m_list;
}
// usage:
unsigned int mask = MaskCreator().Add(3).Add(7).AddRange(16,25).AddMulti(28,30,31).GetMask();
obviously the AddMulti could replace the Add;