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

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

Войти
Регистрация
Восстановить пароль
 
Ryabchik
18 / 18 / 1
Регистрация: 09.01.2013
Сообщений: 163
#1

Класс CTrace - C++

28.06.2013, 11:28. Просмотров 395. Ответов 10
Метки нет (Все метки)

Доброго времени суток!
В самоучителе задание - напишите класс CTrace, который будет использовать во время выполнения для демонстрации входа и выхода из блоков кода.

Пример:
function 'f1' entry
'if' block entry
'if' block entry
function 'f1' entry

Подскажите, в каком направлении копать, просто идей никаких.
Единственное, что я придумал - считывать код программы через fstream и искать вход в функцию или if блок. И вставлять cout << "То, что в примере\n";. Но как то это коряво...

P.s. как получить имя выполняемой функции?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.06.2013, 11:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Класс CTrace (C++):

Есть класс A и класс B, класс B вложен в класс A и вложен в него, как классу B получить доступ к переменным класса A просто по имени? - C++
На самом деле ничё фантастического я не прошу, ведь: template &lt;class T&gt; class matrix { friend class diagonal; ...

Класс таблиц баз данных и класс записей в таблице(реляционная таблица). Предусмотреть класс связей между таблицами - C++
Здравствуйте! Никак не могу продумать структуру этой программы. Проходим наследование, но я все равно не знаю, как его здесь применить. Как...

Отдельно класс данных, класс формул и главный класс - C++
Здравствуйте! У меня есть три вопроса. Первый вопрос. Скажите пожалуйста! Правильный ли это подход к созданию приложений :...

Реализовать класс родительский класс "Пара чисел" и класс-наследник "Комплексное число" - C++
Ткма работы создать класс pair (пара чисел); определить метод перемножения полей и операцию сложения пар (a,b)+(c,d) =(a+b,c+d)...

Класс, производный класс, паблик-класс - C++
Задание: Создать класс колесо, которое имеет радиус. Определить конструкторы и метод доступа. Создать класс машин, содержащий класс колесо....

Создать класс “Автомагазин”, состоящей из класса ”Марки машин”. Класс “Автомагазин ”:название магазина, адрес, телефон. Класс “ Марки машин ”: марка - C++
Создать класс “Автомагазин”, состоящей из класса ”Марки машин”. Класс “Автомагазин ”:название магазина, адрес, телефон. Класс “ Марки...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Tulosba
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
28.06.2013, 11:52 #2
Скорее всего нужно, опираясь на концепцию RAII, создать класс, который в конструкторе будет выводить "...вход туда-то", а в деструкторе "...выход оттуда-то". Принимая в конструкторе аргумент с указанием места. Например:

C++
1
2
3
4
5
6
7
8
class CTrace
{
public:
   CTrace( const std::string& point ): point(point) { std::cout << point << " enter\n"; }
   ~CTrace() { std::cout << point << " exit\n"; }
private:
   const std::string& point;
}
Использование:
C++
1
2
3
4
5
if( condition )
{
   CTrace trace("condition");
   // do smthn
}
Но, может быть требуется нечто другое.
0
Ryabchik
18 / 18 / 1
Регистрация: 09.01.2013
Сообщений: 163
28.06.2013, 12:44  [ТС] #3
@Tulosba, хорошая идея. А как получить имя выполняемой функции, чтобы передать его конструктору.
А то придется прописывать его каждый раз вручную
0
Tulosba
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
28.06.2013, 12:51 #4
@Ryabchik, может быть подойдет макрос __func__
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
 
void f()
{
    cout << __func__ << endl;
}
 
int main() {
    cout << __func__ << endl;
    f();
    return 0;
}
https://ideone.com/aW4Klt

Но внутри условий нужно ведь не имя функции.
1
Ryabchik
18 / 18 / 1
Регистрация: 09.01.2013
Сообщений: 163
28.06.2013, 12:57  [ТС] #5
Прекрасно подойдет, спасибо.
Внутри условий нет, а при входе в функцию оно как раз пригодится.
0
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
28.06.2013, 13:57 #6
C++
1
2
3
4
5
6
7
8
9
bool __trace_cond__(bool value, const char *cond, const char *file, int line)
{
    std::cerr << file << " @ " << line << ": "
              << "condition (" << cond << ") -> "
              << (value ? "true" : "false") << "\n";
    return value;
}
 
#define tif(...) if(__trace_cond__((__VA_ARGS__), #__VA_ARGS__, __FILE__, __LINE__))
\o/
1
Ryabchik
18 / 18 / 1
Регистрация: 09.01.2013
Сообщений: 163
28.06.2013, 15:10  [ТС] #7
@OhMyGodSoLong, я всего полгода учу плюсы и не очень то врубаюсь в то, что вы написали.
Как говорит один знакомый препод: это для крутых парней)

Как вызывать эту функцию? Ей надо передать какое то значение, еще что-то, имя файла, номер строки.

Последняя строка... Ладно, черт с ней.
0
Tulosba
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
28.06.2013, 15:25 #8
@Ryabchik, копируете код, и вместо обычного if в своем коде, пишите tif ... и получите вывод сообщения по условию. Макросизм во всей красе
1
Ryabchik
18 / 18 / 1
Регистрация: 09.01.2013
Сообщений: 163
28.06.2013, 15:53  [ТС] #9
@Tulosba, многозначительное кхмэканье. Сейчас попробую

Добавлено через 3 минуты
@Tulosba, у меня VS ругается на __func__
error C2065: __func__: необъявленный идентификатор
0
Tulosba
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
28.06.2013, 15:56 #10
@Ryabchik, попробуйте __FUNCTION__ см. тут
1
Ryabchik
18 / 18 / 1
Регистрация: 09.01.2013
Сообщений: 163
28.06.2013, 15:59  [ТС] #11
Цитата Сообщение от Tulosba Посмотреть сообщение
попробуйте __FUNCTION__
Все заработало, огромное спасибо
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.06.2013, 15:59
Привет! Вот еще темы с ответами:

Абстрактный класс CGraphicsObject, его наследник - базовый класс CPoint, и класс - наследник от CPoint - C++
Всем доброй ночи! Очень нужна помощь и по мере возможности разъяснения на темы: абстрактный класс в задании(что он из себя представляет и...

Реализовать класс Goods используя для представления цены класс Money - C++
Реализовать класс Goods (пункт 1 ), используя для представления цены класс Money с пункта 2 Реализовать метод уценки товара, уменьшая цену...

Класс домов и класс улиц для учета поступлений квартплаты. Массив - C++
Задание: вырезано Файл StdAfx.h #pragma once #include &quot;targetver.h&quot; #include &lt;stdio.h&gt;

Создать класс Элемент списка (Node), а затем класс Список (List) - C++
Задание: Создать класс Элемент списка (Node), а затем класс Список (List). В зависимости от варианта список должен быть одно или...


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

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

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