Возможно ли иметь шаблон C ++, в котором параметр шаблона может выступать в качестве префикса или суффикса для другого существующего (более длинного) имени типа. Я работаю с кодом, сгенерированным из IDL (Определение интерфейса), поэтому существует много сгенерированных классов со связанными именами. Например, если IDL определяет «Foo», у меня будет сформирован следующий список классов. Foo, FooReader, FooWriter, FooSerializer, ...
Я пытаюсь создать класс, содержащий переменную-член для каждого из этих сгенерированных типов ... В идеале я мог бы объявить объект с Wrapper<Foo> obj;
I может сделать что-то вроде этого:
#define EXPANDTEMPLATE(type) Wrapper<type, type##Reader, type##Writer, ... >
template <typename T, typename TReader, typename TWriter, ...> class Wrapper {
T var1;
TReader var2;
TWriter var3;
...
};
int main(){
EXPANDTEMPLATE(Foo) obj;
//do stuff
}
В моем случае конструкторы по умолчанию не будут проблемой, поэтому работает , но я бы предпочел решение, которое не заставит тех, кто сопровождает код, выследить меня и сломать ноги.
Есть ли лучшее / более чистое решение, чем создание шаблона с 15 параметрами?