используя макросы для сжатия кода - PullRequest
0 голосов
/ 15 октября 2011

Я создаю экземпляры различных объектов на основе XML-файла. Чтобы создать объект из шаблона, я указываю тип данных в xml-файле. Поскольку у меня довольно много шаблонов и типов данных, которые должны поддерживаться, я бы хотел немного сжать свой код. Я думал, что смогу сделать это, используя макросы, но так как я никогда не использовал их, я понятия не имею, как это сделать. Предоставляя список типов данных, которые я хотел бы поддержать, я подумал, что могу просто написать

  MACRO(A, dataTypes)

вместо:

if(s == "float")
{
    return new A<float>(name); 
}
else if(s == "int")
{
    return new A<int>(name); 
}
else if(s == "bool")
{
    return new A<bool>(name); 
}
else if(s == "std::string")
{
    return new A<std::string>(name); 
}
... 

Но как я могу определить такой макрос? Код должен также компилироваться на Android, поэтому он не должен полагаться на другую библиотеку, такую ​​как boost.

1 Ответ

4 голосов
/ 15 октября 2011

Макрос будет выглядеть примерно так:

#define MACRO(T) if (s == #T) { return new A<T>(blockName); }

Вам нужен только параметр (тип), потому что, насколько я вижу, A зафиксирован в вашем коде.

Если вы хотите создать код для нескольких типов одновременно, это не так просто. Вы должны использовать что-то вроде препроцессора boost.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...