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

Расширение функциональности #define - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Описать структуру с именем TRAIN http://www.cyberforum.ru/cpp-beginners/thread768622.html
Описать структуру с именем TRAIN ,содержащую следующие поля: - название пункта назначения ; - номер поезда; - время отправления; Написать программу, выполняющую следующие действия: - ввод с клавиатуры данных в массив, состоящий из K<=10 элементов типа TRAIN; - записи должны быть упорядочены по номерам поездов; - вывод на экран информации о поезде, номер которого введен с клавиатуры; -...
C++ Напечатать таблицу Концентрация хлорной извести в бассейне объемом V=1000м в кубе составляет 10г/л. Через одну трубу в бассейн вливают чистую воду объемом скорость Q=150м в кубе/час, через другую трубу с такой же скоростью вода выливается. При условии идеального перемешивания концентрация хлорной извести по закону С=С_0 e^(-Qt/V), е - время, С_0 - начальная концентрация. Напечатать таблицу изменения концентрации... http://www.cyberforum.ru/cpp-beginners/thread768617.html
Программа записывающая целые числа C++
Написать программу, запрашивающую целые числа ,....,, среди которых могут быть повторяющиеся члены . Выяснить , имеется ли в последовательности хотя бы одна пара совпадающих чисел, вывести их номера и значения.
C++ Удаление класса изнутри
Завершается все корректно. Но насколько безопасна такая конструкция? class A { public: A(){} void func(){ delete this; } };
C++ Написать геодезическую задачу(найти ошибку) C++ http://www.cyberforum.ru/cpp-beginners/thread768591.html
#include<stdio.h> #include<math.h> #include<conio.h> #include<iostream.h> #include<fstream.h> void input( float *ds, ) { float p; int i,n=9;
C++ программа перескакивает определение элемента класса Программа просто проскакивает date a(); #include <iostream> #include <time.h> #include <vector> #include <date.h> using namespace std; int main() { int r = 0; подробнее

Показать сообщение отдельно
IvanPryamoy_2
0 / 0 / 0
Регистрация: 21.01.2013
Сообщений: 23
22.01.2013, 12:33  [ТС]     Расширение функциональности #define
Цитата Сообщение от Croessmah Посмотреть сообщение
Си'шное шаманство на препроцессоре? Может стоит посмотреть на шаблоны?
Шаблон вставит кусок кода.

Я добился вообще-то результата с одной заковыкой: как в параметрах #define использовать запятую, чтобы компилятор не воспринимал это как дополнительный параметр?

Например пишу так (параметра в макросе всего 4):
C++
1
#define MY_MACROS(NameClass, TypeBasic, TypePointer, NamePointer) class NameClass : public TypeBasic{public:TypePointer* NamePointer;NameClass (clong Quantity1_V, clong Quantity2_V = -1, clong Quantity3_V = -1):SmartArray(Quantity1_V, Quantity2_V, Quantity3_V){}NameClass(){}};
Дальше в коде использую так:
C++
1
MY_MACROS(cArray,  SmartArray<long,2>,  SmartArray<long, 1>,  Array2)
, но компилятор воспринимает запятые, разделяющие параметры шаблона, как делители (и считает, что параметров слишком много, о чем выдает ошибку). Как передать тип данных "SmartArray<long,2>"?

UPDATE:
Добавлено через 12 минут
Обошел небольшим извращением. Определил новые define-ы, которые внутри себя "съели" запятые:

C++
1
2
3
#define SmartArray1(Type) SmartArray<Type, 1>
#define SmartArray2(Type) SmartArray<Type, 2>
#define SmartArray3(Type) SmartArray<Type, 3>
Теперь вызов макроса изменился:
C++
1
MY_MACROS(cArray,  SmartArray2(long),  SmartArray1(long),  Array2)
В общем случае, конечно, не айс (второй параметр может принимать и миллион значений и столько define-ов не определишь), но в моем случае- подходит
 
Текущее время: 20:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru