2013-09-02 2 views
0

Я застрял в этом примере:Конкатенация мой объект со строкой

#define Listof(Type) class Type##List \ 
    { \ 
    public: \ 
    Type##List(){} \ 
    private: \ 
    int itsLength; \ 
    }; 

Может кто-нибудь объяснить мне, что это намерение и точка в этом примере? Потому что я нашел этот пример в книге, но он не был объяснен.

+0

Бросьте эту книгу, она учит вас плохим вещам - это в основном ужасный способ использования макросов для создания шаблонов. – Mac

+0

сказано в книге, что этот пример предназначен только для того, чтобы показать использование макросов, и говорит, что следующий подход - это шаблоны. теперь мне нужно только знать, как манипулировать этим примером больше. любая помощь высоко оценена – ProDev7

+0

Хорошо, это справедливо, я думаю. Тем не менее, никогда не делайте этого в производственном коде - он намного более хрупкий и негибкий, чем эквивалент на основе шаблонов. – Mac

ответ

2

ИДЕАМ является создание класса MyTypeNameList при использовании макроса, как этот Listof(MyTypeName)

Это ярлык, чтобы создать класс с именем XXXXList объявлен с CTOR по умолчанию, и itsLength члена;

пример кода:

//declare a class 
Listof(A) 

после препроцессора это

class AList{ 
public: 
    AList(){} 
private: 
int itsLength; 
}; 
+0

Вы бы немного объяснили? не могли бы вы привести пример – ProDev7

+0

ok. Я получил много thnx dzada – ProDev7

1

Это Macro, именно этот один расшириться в определение класса, например

Listof(String) 

Будет расширен до:

class StringList 
{ 
    public: 
    StringList(){} 

    private: 
    int itsLength; 
} 

Это означает, что в любом месте вашего кода, где вы используете макрос, это то же самое, что и запись самого класса.

+0

ok. ta very much – ProDev7

+0

Эй, Ангел, я попробовал использовать, но я снова застрял. не могли бы вы представить подробный пример ??? спасибо за ваше время и усилия – ProDev7

+0

Как вы застряли ?, что вы пытаетесь сделать? – AngelCastillo

Смежные вопросы