Появиться ли такая возможность, а может уже есть?
Или как еще сделать что-то подобное:
struct x {
int (*f)();
} _x[]= {
{ puts("the anonymous function1"); },
{ puts("the anonymous function2"); }
};
Здравствуйте, R1, Вы писали:
R1>Появиться ли такая возможность, а может уже есть?
R1>Или как еще сделать что-то подобное:
R1>R1>struct x {
R1> int (*f)();
R1>} _x[]= {
R1> { puts("the anonymous function1"); },
R1> { puts("the anonymous function2"); }
R1>};
R1>
На данный момент заменителями этой вещи существуют : boost::bind/boost::lambda, локальные классы.
Вы лучше скажите где вам это понадобилось, а там найдется подходящее решение
есть конечно жесткий вариант, но както не подходит
#include <cstdio>
typedef int (*fint_t)();
int
main()
{
fint_t anon = (fint_t)(char*)"\x31\xC0\xC3"; // return(0);
return(anon());
}
Здравствуйте, _nn_, Вы писали:
__>На данный момент заменителями этой вещи существуют : boost::bind/boost::lambda, локальные классы.
__>Вы лучше скажите где вам это понадобилось, а там найдется подходящее решение
1) очень удобно использовать при автогенерации кода.
2) пишу библиотеку где возможность обьявлять функции "неотходя от кассы

" внесет ясность и практичность, о как. Вообщем, чтобы действие и реакция на действие находились в одном месте, а обьявлять функцию где-то, а потом использовть указатель неочень удобно и не наглядно, причем этих функций достаточно много.
Какроче как в генераторах типа yacc,flex,...
/* приметно так */
typedef int (*fint_t)();
typedef struct x_t {
char * expr;
fint_t fn_accept;
} x_t;
// где-то в программе
x_t x =
{
"\d+",
{ return(replace_allowed? true:false); }
};
char * result = replace(x, string_for_replace); // заменить с учетом контекста
Здравствуйте, R1, Вы писали:
R1>Здравствуйте, _nn_, Вы писали:
__>>На данный момент заменителями этой вещи существуют : boost::bind/boost::lambda, локальные классы.
__>>Вы лучше скажите где вам это понадобилось, а там найдется подходящее решение
R1>1) очень удобно использовать при автогенерации кода.
R1>2) пишу библиотеку где возможность обьявлять функции "неотходя от кассы
" внесет ясность и практичность, о как. Вообщем, чтобы действие и реакция на действие находились в одном месте, а обьявлять функцию где-то, а потом использовть указатель неочень удобно и не наглядно, причем этих функций достаточно много.
R1>Какроче как в генераторах типа yacc,flex,...
R1>R1>/* приметно так */
R1>typedef int (*fint_t)();
R1>typedef struct x_t {
R1> char * expr;
R1> fint_t fn_accept;
R1>} x_t;
R1>// где-то в программе
R1>x_t x =
R1>{
R1> "\d+",
R1> { return(replace_allowed? true:false); }
R1>};
R1>char * result = replace(x, string_for_replace); // заменить с учетом контекста
R1>
Локальные классы не спасут ?
void f()
{
class a_
{
public:
operator()(int i)
{
cout << i;
}
}a;
a(1);
}
__>Локальные классы не спасут ?
__>__>void f()
__>{
__> class a_
__> {
__> public:
__> operator()(int i)
__> {
__> cout << i;
__> }
__> }a;
__> a(1);
__>}
__>
Выглядет немного некрасиво но уже что-то