如果我inline
在MATLAB中使用该函数,我可以创建一个单独的函数名称,可以根据以前的选择做出不同的响应:
if (someCondition)
p = inline('a - b','a','b');
else
p = inline('a + b','a','b');
end
c = p(1,2);
d = p(3,4);
Run Code Online (Sandbox Code Playgroud)
但是我正在创建的内联函数变得非常史诗,所以我想将它们更改为其他类型的函数(即m文件,子函数或嵌套函数).
假设我有m个文件,比如Mercator.m
,KavrayskiyVII.m
等等(都取值phi
和lambda
),我想以p
与上面相同的方式分配所选择的函数,以便我可以调用它多次(带可变大小的矩阵和使用eval
不可能或完全混乱的东西.
我有一个变量,type
,那将是所需要的功能(例如该名称中的一个'Mercator'
,'KavrayskiyVII'
等等).我想我需要p
进入一个指向type
变量内部命名函数的指针.我有什么想法可以做到这一点?
我个人实验之一,了解一些C++ 0x特性:我正在尝试将函数指针传递给模板函数来执行.最终执行应该发生在不同的线程中.但是对于所有不同类型的函数,我无法使模板工作.
#include <functional>
int foo(void) {return 2;}
class bar {
public:
int operator() (void) {return 4;};
int something(int a) {return a;};
};
template <class C>
int func(C&& c)
{
//typedef typename std::result_of< C() >::type result_type;
typedef typename std::conditional<
std::is_pointer< C >::value,
std::result_of< C() >::type,
std::conditional<
std::is_object< C >::value,
std::result_of< typename C::operator() >::type,
void>
>::type result_type;
result_type result = c();
return result;
}
int main(int argc, char* argv[])
{
// call with a function pointer
func(foo);
// call with a …
Run Code Online (Sandbox Code Playgroud) 它是否正确?
int (*(*ptr)())[];
Run Code Online (Sandbox Code Playgroud)
我知道这是微不足道的,但我正在看一个关于这种结构的旧测试,而这个特殊的组合并没有在测试中,它真的让我发疯; 我只需要确定一下.这些声明是否有明确而可靠的可理解规则?(即:指向......数组的指针......指向......等等的函数)谢谢!
[R
阅读C++标准,我看到有"函数"类型和"函数指针"类型:
typedef int func(int); // function
typedef int (*pfunc)(int); // pointer to function
typedef func* pfunc; // same as above
Run Code Online (Sandbox Code Playgroud)
我从未见过在示例之外使用的函数类型(或者我可能没有认识到它们的用法?).一些例子:
func increase, decrease; // declares two functions
int increase(int), decrease(int); // same as above
int increase(int x) {return x + 1;} // cannot use the typedef when defining functions
int decrease(int x) {return x - 1;} // cannot use the typedef when defining functions
struct mystruct
{
func add, subtract, multiply; // declares three member functions
int member;
}; …
Run Code Online (Sandbox Code Playgroud) 例如,为什么这有效?
def func1(func1var):
def innerfunc(innerfuncvar):
if func1var == 1:
print innerfuncvar
else:
print 5
func2(innerfunc)
def func2(function):
function(9)
Run Code Online (Sandbox Code Playgroud)
当innerfunc
被调用时func2
,它如何知道func1var
?的值?
代码段如下.无法理解为什么我收到此错误.
void
SipObj::check_each_field()
{
map <std::string, sip_field_getter>::iterator msg;
string str;
char name[20];
bool res = false;
sscanf(get_payload(), "%s %*s", name);
LOGINFO(lc()) << "INVITE:" << name;
str = name;
msg = sip_field_map.find(str);
if (msg != sip_field_map.end()) {
sip_field_getter sip_field = msg->second;
res = (this).*sip_field();
}
}
typedef bool (SipObj::*sip_field_getter)();
static map <std::string, sip_field_getter> sip_field_map;
sip_field_getter is a place holder for function names
Run Code Online (Sandbox Code Playgroud) 我一直在阅读这篇文章:http://en.wikipedia.org/wiki/Function_pointer,我有点困惑.由于C/C++支持函数指针,这是否意味着它们通常支持函数式编程?请注意,我实际上并不想使用C或C++进行函数式编程,但我很好奇,因为我从未听说过C或C++支持这样的事情.(我知道C语言中存在许多函数式编程语言的编译器,但这并不是我所说的"支持").
我想创建一个像这样的函数指针:
void(*function_pointer)()noexcept;
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用.似乎函数声明中的异常说明符无效.必须有办法做到这一点.对?
这与一个与此不同的问题有关.在这里,我问如何使用noexcept说明符创建一个函数指针.在"函数typedef中的noexcept说明符"这个问题中没有被问到或回答过.
对于我正在处理的项目,最好有一个通用的“函数指针”类型。但是,在 C 中,要拥有指向函数的指针,您需要在函数指针的类型中指定原型。
例如,如果我有 function void setdata(short data)
,我不能将它存储在与 function 相同的指针中int getdata()
,因为它们的参数和返回值是不同的。
经过一些横向思考,我想出了以下解决方法:
typedef long (* PFL)(); /* pointer to function that returns a long... */
typedef short (* PFI)(); /* pointer to function that returns a short... */
typedef void (* PFV)(); /* pointer to function that returns a void... */
typedef void (* PFVAL)(long); /* pointer to function that returns a void...
but has a long argument...*/
typedef void (* PFVAI)(short); /* pointer to function that …
Run Code Online (Sandbox Code Playgroud)