Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
#1

Что делают две решетки в макроссе? - C++

11.07.2015, 12:34. Просмотров 602. Ответов 7
Метки нет (Все метки)

Есть макрос:
C++
1
#define _RUNTIME_CLASS(class_name) ((CRuntimeClass*)(&class_name::class##class_name))
Что делают две решетки в макроссе?
Например мы вызываем для класса my_class и что получается?
C++
1
((CRuntimeClass*)(&my_class::class##my_class))
Получается указатель и на что две решетки заменяются?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.07.2015, 12:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Что делают две решетки в макроссе? (C++):

Что делают операторы? - C++
#include <windows.h> #include <stdio.h> #include <math.h> int main(int argc, char* argv) { SetConsoleOutputCP(1251); char...

Функции и что делают - C++
У меня есть такая полностью написанная программа по Файловому менеджеру .нужно определить что делает каждая функция... помогите...

Что делают create_array и print_array? - C++
объясните подробно, что выполняют эти строки, пожалуйста)) create_array(arr, N); print_array(arr, N);

Что делают функции int(), float()? - C++
Добрый день. Неоднократно встречал функции вида int(), float() и т.д. Вопрос - что они делаю и зачем они нужны. Спасибо!

Объясните что делают эти команды - C++
Доброй ночи. Объясните что делает здесь каждая команда/функция Вот код void show_files(const wchar_t * _path, const wchar_t *...

Подскажите что делают эти функции - C++
ifstream fin(filename, ios::out); #define MAX_WORD 1000 char buffer; fin >> buffer; len = strlen(buffer);заранее спасибо, очень...

7
0x10
2465 / 1637 / 239
Регистрация: 24.11.2012
Сообщений: 4,037
11.07.2015, 12:36 #2
Конкатенация:
C++
1
((CRuntimeClass*)(&my_class::classmy_class))
В чем проблема загуглить/проверить самому?
3
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
11.07.2015, 12:58  [ТС] #3
Цитата Сообщение от 0x10 Посмотреть сообщение
Конкатенация:
Код C++
Выделить код
1
((CRuntimeClass*)(&my_class::classmy_class))
В чем проблема загуглить/проверить самому?
И что это получается? Типо такой член должен быть в классе?
А что означает одна решетка, от код макроса, я значения поподставлял, хочу посмотреть что получится
C++
1
2
3
4
5
AFX_COMDAT const CRuntimeClass CSpaceship::class##CSpaceship = { 
        #CSpaceship, sizeof(class CSpaceship), 0xFFFF, CSpaceship::CreateObject, 
        ((CRuntimeClass*)(&CCmdTarget::class##CCmdTarget)), NULL, NULL }; 
    CRuntimeClass* class_name::GetRuntimeClass() const 
        { return ((CRuntimeClass*)(&CSpaceship::class##CSpaceship));}
Добавлено через 5 минут
И что это &my_class::classmy_class означает? Обращение к статическому члену класса my_class?

Добавлено через 3 минуты
Читал что одинарная решетка - это кавычки, получается тогда макросс:
C++
1
2
3
4
5
6
7
#define IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, wSchema, pfnNew, class_init) \
 
    __declspec(selectany) const CRuntimeClass CSpaceship::classCSpaceship = { 
        "CSpaceship", sizeof(class CSpaceship), 0xFFFF, CSpaceship::CreateObject, 
        ((CRuntimeClass*)(&CCmdTarget::classCCmdTarget)), NULL, NULL }; 
    CRuntimeClass* CSpaceship::GetRuntimeClass() const 
        { return ((CRuntimeClass*)(&CSpaceship::classCSpaceship));}
Только я не пойму что он делает
0
hoggy
6646 / 2832 / 485
Регистрация: 15.11.2014
Сообщений: 6,256
Завершенные тесты: 1
11.07.2015, 12:59 #4
Цитата Сообщение от ninja2 Посмотреть сообщение
И что это получается? Типо такой член должен быть в классе?
типо да.

Цитата Сообщение от ninja2 Посмотреть сообщение
А что означает одна решетка
литерная константа.

пример использования:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
 
 
#define dDEBUG(val) \
    std::cout<< #val << " = " << val <<std::endl;
 
int main()
{
    std::cout << "Hello, world!\n";
    
    int value = 33;
    
    dDEBUG(value);
    
}
вывод:
Hello, world!
value = 33
1
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
11.07.2015, 13:20  [ТС] #5
А что этот код означает?
C++
1
2
3
__declspec(selectany) const CRuntimeClass CSpaceship::classCSpaceship = { 
        "CSpaceship", sizeof(class CSpaceship), 0xFFFF, CSpaceship::CreateObject, 
        ((CRuntimeClass*)(&CCmdTarget::classCCmdTarget)), NULL, NULL };
Что здесь происходит, создается класс CRuntimeClass со членом класса CSpaceship::classCSpaceship, а что это в фигурных скобках за фигня неясная? Я такой синтаксис первый раз вижу, что это такое?

Добавлено через 3 минуты
Могу подсказать CRuntimeClass - это структура, получается в фигурных скобках например такое
C++
1
CRuntimeClass p={"dd","dddd","cvdadf"};
Это типо определение структуры?
Вообще синтаксис не ясный, первый раз такой вижу

Добавлено через 2 минуты
Вот определение CRuntimeClass, мб. вам поможет разобраться что да как

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
struct CRuntimeClass
{
// Attributes
    LPCSTR m_lpszClassName;
    int m_nObjectSize;
    UINT m_wSchema; // schema number of the loaded class
    CObject* (PASCAL* m_pfnCreateObject)(); // NULL => abstract class
#ifdef _AFXDLL
    CRuntimeClass* (PASCAL* m_pfnGetBaseClass)();
#else
    CRuntimeClass* m_pBaseClass;
#endif
 
// Operations
    CObject* CreateObject();
    BOOL IsDerivedFrom(const CRuntimeClass* pBaseClass) const;
 
    // dynamic name lookup and creation
    static CRuntimeClass* PASCAL FromName(LPCSTR lpszClassName);
    static CRuntimeClass* PASCAL FromName(LPCWSTR lpszClassName);
    static CObject* PASCAL CreateObject(LPCSTR lpszClassName);
    static CObject* PASCAL CreateObject(LPCWSTR lpszClassName);
 
// Implementation
    void Store(CArchive& ar) const;
    static CRuntimeClass* PASCAL Load(CArchive& ar, UINT* pwSchemaNum);
 
    // CRuntimeClass objects linked together in simple list
    CRuntimeClass* m_pNextClass;       // linked list of registered classes
    const AFX_CLASSINIT* m_pClassInit;
};


Добавлено через 6 минут
Вообще никак не пойму зачем этот макрос IMPLEMENT_RUNTIMECLASS нужен и как его использовать в программах?
0
hoggy
6646 / 2832 / 485
Регистрация: 15.11.2014
Сообщений: 6,256
Завершенные тесты: 1
11.07.2015, 13:26 #6
в классе CSpaceship есть поле по имени classCSpaceship ,
имеющее тип const CRuntimeClass,
и инициализирующееся подобно структуре, при помощи { ... }
1
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
11.07.2015, 14:17  [ТС] #7
Цитата Сообщение от hoggy Посмотреть сообщение
в классе CSpaceship есть поле по имени classCSpaceship ,
имеющее тип const CRuntimeClass,
Ну да в класс добавляем макрос DECLARE_DYNCREATE(CSpaceship) и он добавляет в класс static const CRuntimeClass c именем classCSpaceship и два объявления функций одну статическую static CObject* PASCAL CreateObject(); и другую виртуальную virtual CRuntimeClass* GetRuntimeClass() const;, этим функциям дает определение вне класса макросс IMPLEMENT_DYNCREATE в котором функция
C++
1
2
CObject* PASCAL class_name::CreateObject() 
        { return new class_name; }
и вызов макроса IMPLEMENT_RUNTIMECLASS - а он уже делает инициализацию структуры CRuntimeClass и дает определения функции GetRuntimeClass.
Щас попробую на практике их поиспользовать!

А на деле что лучше использовать эти макросы да? Эти макросы используются вместо new и dynamic_cast вроде, типо их лучше использовать хз. ниче не ясно с этими макросами, темный лес

Добавлено через 2 минуты
В любом классе поражденном от CObject находится структура CRuntimeClass в которой находится информация о классе
0
Evg
Эксперт CАвтор FAQ
17934 / 6162 / 409
Регистрация: 30.03.2009
Сообщений: 16,918
Записей в блоге: 27
12.07.2015, 17:02 #8
http://www.cyberforum.ru/blogs/18334/blog100.html
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.07.2015, 17:02
Привет! Вот еще темы с ответами:

Что делают операторы switch/case - C++
что делают функции : switch ? case ?

Объясните пожалуйста что делают выделенные строки - C++
#include &lt;cstdlib&gt; #include &lt;iostream&gt; using namespace std; typedef struct node { int number; node *next; ...

Описать строчки кода, что они делают! - C++
Код программы: #include &lt;iostream&gt; #include &lt;time.h&gt; using namespace std; int main() { setlocale(LC_ALL,...

Необходимо описать модули. Т.е что они делают - C++
Необходимо описать модули. Т.е что они делают Вот программа: #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;fstream&gt; using...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Yandex
Объявления
12.07.2015, 17:02
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru