Предположим, у меня есть много классов с их коллегами «* Pack» в именовании. Например, если у меня есть класс Moo, у меня есть MooPack, если у меня есть Foo, у меня также есть FooPack.Stringify и Unstringify аргументы шаблона
Я хочу иметь C++ шаблонной функции, которая возвращает FooPack из Foo
template <class X, class XPack>
XPack packify(X input){
...
}
Можно ли это сделать без того, чтобы указать аргумент шаблона? На данный момент, это должно быть сделано так:
Moo moo;
MooPack mooppey = packify<Moo, MooPack>(moo);
Если требуется только шаблон аргумента Moo, что некрасиво спецификация шаблона немного может уйти, но кроме использования #defines, который не является на самом деле лучшее решение тоже, все равно этого не делает.
Есть ли способ, или мне придется ждать C++ 0x?
Ах да, я думаю, что указание только одного аргумента на самом деле достаточно приемлемо (два аргумента просто выглядят уродливыми). Эта вложенная вещь класса - отличная идея, но я не могу изменить существующие объявления классов. – kamziro
Вам даже не нужно встраивать класс '* Pack', вам просто нужно предоставить вложенный в него typedef. Использование такое же, как в приведенном выше примере. Это довольно распространенный шаблон (называемый «metafunction»). –