TL; DR是否有无限的typedef函数指针继承可能?
是否有可能,为foo
类型的typedef
功能指向另一种类型bar
等?以我的经验是,但这是怎么回事?
前言
通过this问题的启发,我试图玩弄typedef
函数指针。 有趣的东西出来了。我有听说,它不可能使用typedef
来投射函数类型。
这是在诸如绝对真实:
typedef existing type sometypedef(/*parameters*/);
sometypedef testfunc{
^
/*Error*/
};
这不仅因为它是不可能的,但也完全没用,因为template
,但并非总是如此...
当魔术进来
指针可以非常方便,导致很大的困惑,但真正有用的时候使用正确。考虑下面的例子:
我们有一个函数foo
,我们想引用它作为指针。 只要没有复杂的参数就没问题。
但是现在想要参考foo
和其他变量的里面函数bar
的参数。现在,我们就完蛋了,因为
void* foo(/*parameters*/);
void bar(foo* f)
或类似的东西是不允许的。我们根本无法参考foo
。但是,不要放弃!因为这里typedef
有用。我们可以制造类似
typedef void (*newfunctype)(/*pointer parameters*/);
newfunctype* foo();
newfunctype bar(newfunctype* nf);
现在它的工作!
......但是,这不是实际的问题
因为真正的问题是如何?怎么样,比如下面这段代码的工作原理?:
typedef void (*sometype)();
typedef sometype(*anothertype)(sometype);
typedef anothertype(*yetanothertype)(sometype);
yetanothertype d(anothertype);
/*etc, other initializations*/
我们甚至可以使功能与这些东西,像
anothertype anotherfunc(anothertype* an, yetanothertype* sn);
,他们... 工作般的魅力?
这些指向新的typedef
类型的指针可以扩展多长时间?永远? 这是非常标准的C++(或c?)语法,还是会导致未定义的行为?
'yetanothertype * f = new yetanothertype();'我不认为这是个好主意。 –
@GuillaumeRacicot为什么这样?是不是初始化指针总是一个好主意? – Tatu
您正在动态分配一个函数指针。免费商店是可读写的内存,但不可执行。任何尝试使用它都会导致分段错误。 –