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

определение функции в ЗАГОЛОВОЧНОМ файле. В основном предполагается переопределение ТЕЛА этой функции. Как это сделать, не правя хидер? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.84
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
17.06.2011, 19:36     определение функции в ЗАГОЛОВОЧНОМ файле. В основном предполагается переопределение ТЕЛА этой функции. Как это сделать, не правя хидер? #1
Сабж, а подробнее если в заголовочном файле hider.h описана функция, допустим так:
C++
1
2
3
4
void f ();
void f () {
  int per= 10;
}
Причём что очень важно, int per= 10 это тык скыть стандартный способ работы функции, а предполагается ещё и нестандартный, например

C++
1
int per= 22;
(понятно, что коды намного сложнее, это для примера)
Так, а прототип функции должен остаться ПРЕЖНИМ
[CPP]void f ();/CPP]

Так, вот пользователь хидера должен сам определять пользоваться ли ему стандартной функцией f:
C++
1
2
3
4
#incliude "hider.h"
int main () {
 f();
}
или писать свою так:
C++
1
2
3
4
5
6
7
8
#incliude "hider.h"
//прототип не пишем, ибо он прежний; уже прописан в хидере
void f () {
  int per= 22;
};
int main () {
 f();
}
ОК, но тогда пользователю во втором случае придётся лезть в хидер и ковыряться в нём своими толстыми пальцами, конкретнее- закомментировать стандартное определение f(); Возможно ли обойтись без этого, например, директивами препроцессору? Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.06.2011, 19:36     определение функции в ЗАГОЛОВОЧНОМ файле. В основном предполагается переопределение ТЕЛА этой функции. Как это сделать, не правя хидер?
Посмотрите здесь:

C++ return из функции более одного элемента как это сделать
C++ можно ли в с++ вызвать переменную из одной функции в другую т.е. мы переменну задали в одной функции а использовали в другой... и как это реализовать?
C++ Как разместить 2 поиска в отдельном заголовочном файле
Возникла необходимость в основном коде вызвать функцию и чтобы код продолжал выполнение, НЕ ДОЖИДАЯСЬ окончания работы этой функции C++
C++ функции в заголовочном файле
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
timchuchok
15 / 15 / 0
Регистрация: 21.12.2010
Сообщений: 55
17.06.2011, 19:43     определение функции в ЗАГОЛОВОЧНОМ файле. В основном предполагается переопределение ТЕЛА этой функции. Как это сделать, не правя хидер? #2
Хотелось бы взглянуть на то, что вы хотите сделать в оригинале, так как пример, который привели вы, решается, например, параметризацией функции.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
17.06.2011, 19:54     определение функции в ЗАГОЛОВОЧНОМ файле. В основном предполагается переопределение ТЕЛА этой функции. Как это сделать, не правя хидер? #3
не инклудить хедер, хотя все одно быдлокод
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
17.06.2011, 20:24  [ТС]     определение функции в ЗАГОЛОВОЧНОМ файле. В основном предполагается переопределение ТЕЛА этой функции. Как это сделать, не правя хидер? #4
Цитата Сообщение от timchuchok Посмотреть сообщение
Хотелось бы взглянуть на то, что вы хотите сделать в оригинале, так как пример, который привели вы, решается, например, параметризацией функции.
там трудно разобраться.

Ну да, можно определить свой тип и пусть функция с ним работает. Но понимаете, я хочу свой код кинуть в люди и хочу упростить жизнь конечному пользователю, чтобы он не связывался с шаблонами и не определял свой тип, а просто переписал функцию и всё.
pito211
 Аватар для pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
17.06.2011, 20:43     определение функции в ЗАГОЛОВОЧНОМ файле. В основном предполагается переопределение ТЕЛА этой функции. Как это сделать, не правя хидер? #5
тебе чё нужны две функции f содинаковыми параметрами но выполняющими разную работу? в данном случае это возможно, просто в хидере заключи в неймспейс и обращайся к ней header::f()
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
17.06.2011, 21:07  [ТС]     определение функции в ЗАГОЛОВОЧНОМ файле. В основном предполагается переопределение ТЕЛА этой функции. Как это сделать, не правя хидер? #6
Вызов тоже осуществляется в хидере, получается, опять хидер править. Грустно, я-то разберусь, а вот челы нет.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
17.06.2011, 21:08     определение функции в ЗАГОЛОВОЧНОМ файле. В основном предполагается переопределение ТЕЛА этой функции. Как это сделать, не правя хидер? #7
Цитата Сообщение от kravam Посмотреть сообщение
директивами препроцессору
C++
1
2
3
4
5
6
7
//f.h
#ifdef _USE_FUNC
void f () {
  int per= 10;
  std::cout << per;
}
#endif
C++
1
2
3
4
5
6
7
8
9
10
11
12
//main.cpp
#include <iostream>
//#define _USE_FUNC
#include "f.h"
void f(){
    int per=22;
    std::cout << per;
}
int main(){
    f();
    return 0;
}
Если раскомментить _USE_FUNC то будет работать функция из хедера.
Можно наоборот, если не поставить макрос, то будет работать из хедера.
Для этого нужно #ifdef заменить на #ifndef
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
17.06.2011, 21:19  [ТС]     определение функции в ЗАГОЛОВОЧНОМ файле. В основном предполагается переопределение ТЕЛА этой функции. Как это сделать, не правя хидер? #8
спасибо, пойдёт, но с натягом. Это получается в сопроводительной документации я должен указать, что для использования стандартной функции f(); необходимо помимо включения заголовочного файла в главном определить переменную //#define _USE_FUNC

Коряво. Ну, я наверное, многого хочу. Наверное, заставлю пользователя определять
собственные типы чтобы воспользоваться шаблонами функции, тут надо подумать будет
ещё.
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
17.06.2011, 21:53     определение функции в ЗАГОЛОВОЧНОМ файле. В основном предполагается переопределение ТЕЛА этой функции. Как это сделать, не правя хидер? #9
Цитата Сообщение от kravam Посмотреть сообщение
спасибо, пойдёт, но с натягом. Это получается в сопроводительной документации я должен указать, что для использования стандартной функции f(); необходимо помимо включения заголовочного файла в главном определить переменную //#define _USE_FUNC

Коряво. Ну, я наверное, многого хочу. Наверное, заставлю пользователя определять
собственные типы чтобы воспользоваться шаблонами функции, тут надо подумать будет
ещё.
Микрософту не коряво, а тебе - коряво...
Открываем MSDN и читаем: чтобы использовать стандартные математические константы, надо определить имечко
#define _USE_MATH_DEFINES

kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
17.06.2011, 21:55  [ТС]     определение функции в ЗАГОЛОВОЧНОМ файле. В основном предполагается переопределение ТЕЛА этой функции. Как это сделать, не правя хидер? #10
Не мне, а конечному пользователю моего проекта.
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
17.06.2011, 22:01     определение функции в ЗАГОЛОВОЧНОМ файле. В основном предполагается переопределение ТЕЛА этой функции. Как это сделать, не правя хидер? #11
kravam, дык мы ж с тобой - конечные пользователи продукта Микрософт! Нам и приходится использовать определенную ими константу.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
17.06.2011, 22:59  [ТС]     определение функции в ЗАГОЛОВОЧНОМ файле. В основном предполагается переопределение ТЕЛА этой функции. Как это сделать, не правя хидер? #12
Так, алё, какая константа?
У меня нет никакой константы определённой мелкомягкими.
Конечный пользователь- это не я, это чел, который будет использовать мой хидер. И чем меньше он будет делать движений, тем лучше

Не по теме:

Какой Багдад? Какая война?

grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
17.06.2011, 23:07     определение функции в ЗАГОЛОВОЧНОМ файле. В основном предполагается переопределение ТЕЛА этой функции. Как это сделать, не правя хидер? #13
Ну а что ещё предложить? Ну есть ещё дедовский проверенный способ — callback-функции.
Пусть пользователь определяет какую хочет функцию и регистрирует её вызовом set_my_own_callback_function(my_func)
Ну а не определит — будет использоваться функция по-умолчанию.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
17.06.2011, 23:22  [ТС]     определение функции в ЗАГОЛОВОЧНОМ файле. В основном предполагается переопределение ТЕЛА этой функции. Как это сделать, не правя хидер? #14
Нельзя ли код? Дело в том, что функция, которую я кропаю и есть callback и она вызывается в хидере так:
C++
1
2
3
main_f (f) {
 f();
}
А если я накропаю в *cpp другую f () то компилятор не схавает определённую в хидере и в *cpp.
Вот я засомневался, а у меня функция ли обратного вызова? Ну да, её имя передаётся параметром в другую функцию и оттуда вызывается. Так ведь?
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
17.06.2011, 23:29     определение функции в ЗАГОЛОВОЧНОМ файле. В основном предполагается переопределение ТЕЛА этой функции. Как это сделать, не правя хидер? #15
почему вообще в хедере определена функция?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.06.2011, 23:50     определение функции в ЗАГОЛОВОЧНОМ файле. В основном предполагается переопределение ТЕЛА этой функции. Как это сделать, не правя хидер?
Еще ссылки по теме:

C++ Как подключить библиотеки в заголовочном файле?
Перевести с Pascal вычисление функции на заданном промежутке и построить график этой функции C++
C++ Вычисление функции на заданном промежутке, и построение графика этой функции

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

Или воспользуйтесь поиском по форуму:
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
17.06.2011, 23:50  [ТС]     определение функции в ЗАГОЛОВОЧНОМ файле. В основном предполагается переопределение ТЕЛА этой функции. Как это сделать, не правя хидер? #16
потому что в хидере определён класс вместе с функцией, без которой он теряет смысл; класс следует определить в хидере и функцию там же.

Я могу, конечно, определить их в файлах кода, но что я скажу человеку, который будет их использовать? Вот тебе отдельно заголовочный файл, а вот файл реализации? Нет, со мной так не поступали; я скачал из инета класс Verylong, и реализованный и объявленный в одном хидере и очень этому рад, подключаю один хидер и не жужжу. Меньше движений.
Yandex
Объявления
17.06.2011, 23:50     определение функции в ЗАГОЛОВОЧНОМ файле. В основном предполагается переопределение ТЕЛА этой функции. Как это сделать, не правя хидер?
Ответ Создать тему
Опции темы

Текущее время: 05:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru