Вы можете использовать Where
для фильтрации и Select
для получения желаемого значения.
MyList.Where(i=>i.name == yourName).Select(j=>j.value);
#include <iostream>
using namespace std;
int f1() {
return 1;
}
int f2() {
return 2;
}
typedef int (*fptr)();
fptr f( char c ) {
if ( c == '1' ) {
return f1;
}
else {
return f2;
}
}
int main() {
char c = '1';
fptr fp = f( c );
cout << fp() << endl;
}
Я предполагаю, что здесь C (нет объекты) :):
// Type of function which takes a char and returns an int:
typedef int (*Func)(char a);
// An example of the function you're trying to return and which does something
// with char:
int exampleFunc(char a)
{
return (int)(a + 42);
}
// The function returning the pointer to a function:
Func *returnAfunc(void)
{
return exampleFunc;
}
int f(char) {
return 0;
}
int (*return_f())(char) {
return f;
}
Нет, серьезно, используйте typedef :)
Я предпочитаю возвращать объекты и вызовите оператора (). Таким образом, ваша функция может возвращать интерфейс, и все классы могут наследовать от него. То есть, если вы используете C ++, а не C.
Затем вы можете использовать метод параметризованного коэффициента для возврата объектов на основе ваших входных данных.
Примерно так
#include <iostream>
typedef char (*fn_ptr_t)(char);
char a_fn(char c)
{
return c + 1;
}
char b_fn(char c)
{
return c + 2;
}
fn_ptr_t
return_function(char c)
{
fn_ptr_t result = 0;
switch (c)
{
case 'a':
result = a_fn;
break;
case 'b':
result = b_fn;
break;
}
return result;
}
int
main()
{
fn_ptr_t fn = return_function('a');
std::cout << "a(l) = " << (fn)('l') << std::endl;
return 0;
}
Самый простой способ - ввести нужный тип указателя на функцию, а затем использовать этот
typedef void (*fnptr_t)(int, int);
fptr_t myfunc(char *) { ....
Это код для отображения возврата указателя функции. Сначала вам нужно определить «сигнатуру функции»:
int returnsOne() {
return 1;
}
typedef int(*fp)();
fp returnsFPtoReturnsOne() {
&returnsOne;
}
В вашем конкретном случае:
fp getFunctionFor(char code) {
switch (code) {
case 'a': return &functionA;
case 'b': return &functionB;
}
return NULL;
}
typedef void (*voidFn)();
void foo()
{
}
voidFn goo(char c)
{
if (c == 'f') {
return foo;
}
else {
//..
}
// ..
}
Создайте определение типа для сигнатуры функции:
typedef void (* FuncSig)(int param);
Затем объявите свою функцию как возвращающую FuncSig:
FuncSig GetFunction();