Можно ли в C++ описать и реализовать функцию в функции, как это можно в Delphi/Pascal? Поясню что мне надо:
void Func()
{
//Здесь надо описать функцию void F2() {}
}
... << RSDN@Home 1.2.0 alpha rev. 618>>
-----
С уважением, Алексей.
Re: Функция в функции
От:
Аноним
Дата:
05.10.05 08:17
Оценка:
Здравствуйте, AlexeyStaf, Вы писали:
AS>Можно ли в C++ описать и реализовать функцию в функции, как это можно в Delphi/Pascal? Поясню что мне надо: AS>void Func() AS>{ AS>//Здесь надо описать функцию void F2() {} AS>}
Здравствуйте, AlexeyStaf, Вы писали:
AS>Можно ли в C++ описать и реализовать функцию в функции, как это можно в Delphi/Pascal? Поясню что мне надо: AS>void Func() AS>{ AS>//Здесь надо описать функцию void F2() {} AS>}
Для этого можно использовать вложенный класс:
void Func()
{
struct F2Impl
{
void F2(){}
};
}
The last good thing written in C was Franz Schubert's Symphony No. 9.
Здравствуйте, crable, Вы писали:
C>Здравствуйте, AlexeyStaf, Вы писали:
AS>>Можно ли в C++ описать и реализовать функцию в функции, как это можно в Delphi/Pascal? Поясню что мне надо: C>Для этого можно использовать вложенный класс:
+1, только более С++-но будет у вложенного класса определить оператор (), а не функцию F2. C>
Здравствуйте, Глеб Алексеев, Вы писали:
ГА>Здравствуйте, crable, Вы писали:
C>>Здравствуйте, AlexeyStaf, Вы писали:
AS>>>Можно ли в C++ описать и реализовать функцию в функции, как это можно в Delphi/Pascal? Поясню что мне надо: C>>Для этого можно использовать вложенный класс: ГА>+1, только более С++-но будет у вложенного класса определить оператор (), а не функцию F2.
Я ж просто основу показал, а дальше он и сам разберется...
А еще более C++-но — сделать обе функции методами одного класса, IMHO.
[snip]
The last good thing written in C was Franz Schubert's Symphony No. 9.
Здравствуйте, crable, Вы писали:
C>Здравствуйте, Глеб Алексеев, Вы писали:
ГА>>Здравствуйте, crable, Вы писали:
C>>>Здравствуйте, AlexeyStaf, Вы писали:
AS>>>>Можно ли в C++ описать и реализовать функцию в функции, как это можно в Delphi/Pascal? Поясню что мне надо: C>>>Для этого можно использовать вложенный класс: ГА>>+1, только более С++-но будет у вложенного класса определить оператор (), а не функцию F2. C>Я ж просто основу показал, а дальше он и сам разберется... C>А еще более C++-но — сделать обе функции методами одного класса, IMHO. C>[snip]
Нет, сделать эти две функции методами одного класса не лучше в моей ситуации. У меня так и было, но возникла необходимость работать с этим классом из C# (через dll-библиотеку). А в этой самой функции F2 передается параметр типа PCCERT_CONTEXT — просто переписывать эту структуру на C# не очень хочется, т.к. там есть еще поля структурного типа, которые тоже надо описывать.
Здравствуйте, AlexeyStaf, Вы писали:
AS>Можно ли в C++ описать и реализовать функцию в функции, как это можно в Delphi/Pascal? Поясню что мне надо: AS>void Func() AS>{ AS>//Здесь надо описать функцию void F2() {} AS>}
В стандартном С нельзя. У gcc есть непортабельный extension http://gcc.gnu.org/onlinedocs/gcc-
4.0.0/gcc/Nested-Functions.html#Nested-Functions
Здравствуйте, AlexeyStaf, Вы писали:
AS>Нет, сделать эти две функции методами одного класса не лучше в моей ситуации. У меня так и было, но возникла необходимость работать с этим классом из C# (через dll-библиотеку). А в этой самой функции F2 передается параметр типа PCCERT_CONTEXT — просто переписывать эту структуру на C# не очень хочется, т.к. там есть еще поля структурного типа, которые тоже надо описывать.
Ты зря возражаешь.
struct func_impl {
int a, b, c; // вместо локальных переменыхvoid helper1() { // вспомогательные функции
a = b = 0;
}
void helper2() {
c=3;
}
void operator()(int arg1, float arg2) { // тело основной функции
helper1();
helper2();
}
};
void __declspec(dllexport) my_exported_func(int arg1, float arg2) {
func_impl impl;
return impl(arg1, arg2);
}
Здравствуйте, AlexeyStaf, Вы писали:
AS>Можно ли в C++ описать и реализовать функцию в функции, как это можно в Delphi/Pascal? Поясню что мне надо: AS>void Func() AS>{ AS>//Здесь надо описать функцию void F2() {} AS>}
Так сделать нельзя. Но можно нечто подобное
int main()
{
class Fun2
{
public:
int operator () (int i)
{
return i;
}
} f;
f(1);
}
.
Он синтаксически не похож на вложенные функции Pascal, но с успехом их заменяет, да к тому же ещё и позволяет намного больше возможностей.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re: Функция в функции
От:
Аноним
Дата:
05.10.05 21:23
Оценка:
Здравствуйте, AlexeyStaf, Вы писали:
AS>Можно ли в C++ описать и реализовать функцию в функции, как это можно в Delphi/Pascal? Поясню что мне надо: AS>void Func() AS>{ AS>//Здесь надо описать функцию void F2() {} AS>}