Сопоставьте два типа во время компиляции

У меня есть набор типов, связанных взаимно-однозначным отношением, например:

TypeA ---> Type1
TypeB ---> Type2 
TypeC ---> Type3

Я знаю эти отношения во время компиляции.

Затем у меня есть класс шаблона, который зависит от этих двух типов:

template<class T1,class T2>
class MyClass
{
  T1 foo;
  T2 bar;
};

Теперь пользователь моей библиотеки будет вводить что-то вроде:

MyClass<TypeA,Type1> x;

Это неудобно, потому что существует зависимость между двумя типами, и она должна Пользователю достаточно указать только первый тип.

Кроме того, смешивание двух типов не должно быть возможным:

MyClass<TypeA,Type2> y; //it should not compile

Я не очень хорошо знаком с метапрограммированием шаблонов, у меня сложилось впечатление, что это выполнимая задача, но я могу ошибаться.

Количество задействованных типов велико, однако я рад запустить сценарий для генерации кода, если это необходимо.

Знаете ли вы, возможно ли это, или я зря трачу время? У вас есть идеи указать мне верное направление?

6
задан iammilind 12 October 2011 в 12:27
поделиться