Возможно ли убрать член класса в зависимости от параметра?
От: Van_Der_Lokken  
Дата: 03.10.10 08:42
Оценка:
Йоу. Есть следующее определение шаблонного класса:
template<
  class Attribute1,
  class Attribute2 = void,
  class Attribute3 = void,
  class Attribute4 = void
>
class Entity {
  public:
    typename Attribute1::Type _attribute1;
    typename Attribute2::Type _attribute2;
    typename Attribute3::Type _attribute3;
    typename Attribute4::Type _attribute4;
};

При таком определении класс можно специализировать только четырьмя параметрами, каждый из которых должен быть классом, в котором определено имя Type. Число параметров 4 взято для примера. При реальном использовании шаблонных параметров может быть до 16.

Теперь о том, что хочется. Хочется, чтобы те члены _attributeN, для которых соответствующий шаблонный параметр AttributeN является void, убирались из определения класса. Иными словами, хочется, чтобы при специализации вида Entity< ConcreteAttribute1 >, код компилировался, и в классе был единственный член _attribute1; чтобы при специализации вида Entity< ConcreteAttribute1, ConcreteAttribute2 > в классе были только члены _attribute1 и _attribute2 и т.д. Возможно ли это осуществить каким-либо образом?

P.S.: несмотря на то, что смысл задачи состоит в описании кортежа, заменить её на использование std::tuple по некоторым причинам невозможно.
c++ template
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.