Функция в функции
От: AlexeyStaf Россия  
Дата: 05.10.05 08:14
Оценка:
Можно ли в 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>}

Нет, в С++ и С так нельзя.
Re: Функция в функции
От: crable США  
Дата: 05.10.05 08:17
Оценка: 1 (1) +1
Здравствуйте, 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.
Re: Функция в функции
От: Ligen Украина http://zone-of-ambiguity.blogspot.com/
Дата: 05.10.05 08:26
Оценка:
Здравствуйте, AlexeyStaf, Вы писали:

AS>Можно ли в C++ описать и реализовать функцию в функции, как это можно в Delphi/Pascal?


void Func()
{
struct InnerFncs
{
static void F2() {} // запросто
};

// вызов
InnerFncs::F2();
}

совсем как в Паскале не получиться — у F2 нет доступа к любым переменным функции Func
Viva el Junta Militar! Viva el Presidente!
Re[2]: Функция в функции
От: Phoenickx  
Дата: 05.10.05 08:26
Оценка:
Здравствуйте, crable, Вы писали:

C>Для этого можно использовать вложенный класс:


C>
C>void Func()
C>{
C>struct F2Impl
C>{
C>void F2(){}
C>};
C>}
C>


В дополнение, так сказать: с перегруженными операторами вызова функций реализующими необходимую функциональность.
Re[2]: Функция в функции
От: Глеб Алексеев  
Дата: 05.10.05 08:26
Оценка:
Здравствуйте, crable, Вы писали:

C>Здравствуйте, AlexeyStaf, Вы писали:


AS>>Можно ли в C++ описать и реализовать функцию в функции, как это можно в Delphi/Pascal? Поясню что мне надо:

C>Для этого можно использовать вложенный класс:
+1, только более С++-но будет у вложенного класса определить оператор (), а не функцию F2.
C>
C>void Func()
C>{
C>struct F2Impl
C>{
C>void F2(){}
C>};
C>}
C>

AlexeyStaf'у: учти, что при этом локальные переменные и аргументы внешней функции внутри вложенной не видны.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Функция в функции
От: crable США  
Дата: 05.10.05 08:39
Оценка:
Здравствуйте, Глеб Алексеев, Вы писали:

ГА>Здравствуйте, 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.
Re[4]: Функция в функции
От: AlexeyStaf Россия  
Дата: 05.10.05 08:47
Оценка:
Здравствуйте, crable, Вы писали:

C>Здравствуйте, Глеб Алексеев, Вы писали:


ГА>>Здравствуйте, crable, Вы писали:


C>>>Здравствуйте, AlexeyStaf, Вы писали:


AS>>>>Можно ли в C++ описать и реализовать функцию в функции, как это можно в Delphi/Pascal? Поясню что мне надо:

C>>>Для этого можно использовать вложенный класс:
ГА>>+1, только более С++-но будет у вложенного класса определить оператор (), а не функцию F2.
C>Я ж просто основу показал, а дальше он и сам разберется...
C>А еще более C++-но — сделать обе функции методами одного класса, IMHO.
C>[snip]

Нет, сделать эти две функции методами одного класса не лучше в моей ситуации. У меня так и было, но возникла необходимость работать с этим классом из C# (через dll-библиотеку). А в этой самой функции F2 передается параметр типа PCCERT_CONTEXT — просто переписывать эту структуру на C# не очень хочется, т.к. там есть еще поля структурного типа, которые тоже надо описывать.
... << RSDN@Home 1.2.0 alpha rev. 618>>
-----
С уважением, Алексей.
Re: Функция в функции
От: MaximE Великобритания  
Дата: 05.10.05 08:48
Оценка: +1
Здравствуйте, 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
Re[5]: Функция в функции
От: Глеб Алексеев  
Дата: 05.10.05 08:56
Оценка: 1 (1)
Здравствуйте, 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);
}
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Функция в функции
От: Glоbus Украина  
Дата: 05.10.05 09:11
Оценка:
Здравствуйте, 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);
}
Удачи тебе, браток!
Re: Функция в функции
От: Erop Россия  
Дата: 05.10.05 11:27
Оценка:
Здравствуйте, AlexeyStaf, Вы писали:

AS>Можно ли в C++ описать и реализовать функцию в функции, как это можно в Delphi/Pascal?


Мне больше всего нравится подход, с классами-механизмами
Автор: Erop
Дата: 25.08.05
.
Он синтаксически не похож на вложенные функции Pascal, но с успехом их заменяет, да к тому же ещё и позволяет намного больше возможностей.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re: Функция в функции
От: Аноним  
Дата: 05.10.05 21:23
Оценка:
Здравствуйте, AlexeyStaf, Вы писали:

AS>Можно ли в C++ описать и реализовать функцию в функции, как это можно в Delphi/Pascal? Поясню что мне надо:

AS>void Func()
AS>{
AS>//Здесь надо описать функцию void F2() {}
AS>}

Для решения подобных задач есть boost::lambda
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.