Usando macros ou modelos variadic para implementar um conjunto de funções

Eu tenho um conjunto de métodos usados ​​para instanciar e inicializar um conjunto de objetos. Todos eles são praticamente iguais, exceto pelo número de argumentos que são passados ​​para oNisso função:

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

Note que os argumentos não devem ser usados ​​em qualquer lugar, exceto para serem passados ​​para oNisso função.

Eu gostaria de encontrar uma maneira de implementar todos esses sem ter que duplicar o código para cada tipo de objeto.

Eu tentei usar macros variadic, com o seguinte resultado (inválido):

#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)

Agora, nesta implementação, usei VA_ARGS duas vezes, ambas as vezes incorretamente:

No primeiro caso, eu quero ter uma lista de argumentos com os tipos que eu especifiquei (Arg1 a1, Arg2 a2 ...)

No segundo caso, quero chamar esses argumentos pelos seus nomes (Init (a1, a2 ...)).

Eu tentei usar modelos 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<ObjectType, __VA_ARGS__>(__VA_ARGS__);  \
}

... mas isso não parece funcionar tão bem, recebo o seguinte erro na linha de definição de modelo:

erro C2143: erro de sintaxe: ausente ',' antes de '...'

erro C2065: 'Args': identificador não declarado

Eu estou usando o VS2012.

Eu ainda poderia escrever N macros semelhantes para cada número de argumentos, no entanto eu queria saber se havia uma maneira de obter o mesmo resultado sem duplicar o código?

questionAnswers(2)

yourAnswerToTheQuestion