Использование макрокоманд или шаблонов для реализации набора функций

У меня есть набор методов, используемых для создания и инициализации набора объектов. Все они выглядят примерно одинаково, за исключением количества аргументов, передаваемыхВ этом функция:

ObjectType* CreateObjectType(Arg1 a1, Arg2 arg2, ... ArgN aN)
{
    ObjectType* object = new ObjectType();
    [...]
    object->Init(this, a1, a2, ..., aN);
    [...]
    return object;
}

Обратите внимание, что аргументы не должны использоваться нигде, кроме как для передачиВ этом функция.

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

Я пытался использовать переменные макросы, со следующим (недействительным) результатом:

#define CREATE_OBJECT_IMPL(ObjectType, ...)    \
ObjectType* Create##ObjectType##(__VA_ARGS__)  \
{                                              \
    ObjectType* object = new ObjectType();     \
    [...]
    object->Init(this, ##__VA_ARGS__);         \
    [...]
    return object;                             \
}

// This is the result I am trying to achieve :
CREATE_OBJECT_IMPL(MyFirstObject, bool, float)
CREATE_OBJECT_IMPL(MySecondObject, int)
CREATE_OBJECT_IMPL(MyThirdObject)

Теперь в этой реализации я дважды использовал VA_ARGS, оба раза неправильно:

В первом случае я хочу получить список аргументов с указанными мною типами (Arg1 a1, Arg2 a2 ...)

Во втором случае я хочу назвать эти аргументы их именами (Init (a1, a2 ...)).

Я пытался использовать шаблоны Variadic:

template< typename ObjectType, typename... Args >
ObjectType* CreateObject(Args args)
{
    ObjectType* object = new ObjectType();
    [...]
    object->Init(this, args);
    [...]
    return object;
}

#define CREATE_OBJECT_IMPL(ObjectType, ...)                     \
ObjectType* Create##ObjectType##(__VA_ARGS__)                   \
{                                                               \
    return CreateObject(__VA_ARGS__);  \
}

... но это неКажется, что это работает, я получаю следующую ошибку в строке определения шаблона:

ошибка C2143: синтаксическая ошибка: отсутствует ',' до '...»

ошибка C2065: 'Args' : необъявленный идентификатор

Я использую VS2012.

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

Ответы на вопрос(2)

Ваш ответ на вопрос