是无限的Typedef函数指针继承
Are infinite typedef function pointer inheritances possible?
tl; dr
可以让foo
类型的typedef
函数指向另一种类型bar
,依此类推?根据我的经验是的,但是这怎么样?
前言
受这个问题的启发,我尝试使用typedef
功能指针。有些有趣的事情出来了。我已经听说过无法使用typedef
施放功能类型。
在诸如:
之类的情况下,这绝对是正确的typedef existing type sometypedef(/*parameters*/);
sometypedef testfunc{
^
/*Error*/
};
这不仅是因为它是不可能的,而且由于 template
,而且并非总是没有……
当魔术出现
时Pointers 可能非常方便,并导致极大的困惑,但使用时确实有帮助。考虑以下示例:
我们有一个函数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?)语法,还是导致不确定的行为?
为什么不起作用?它有什么问题?真的没什么。但是无论如何...
typedefs仅是其他类型的别名。让我们从一个示例开始:
using MyType = int; // same thing as typedef int MyType
MyType a;
MyType b;
在编译器的眼中,上面的代码变成了:
int a;
int b;
所以现在您询问示例是如何工作的。好吧,让我们将Typedefs扩展到真实类型中:
typedef int* MyType1;
typedef MyType1* MyType2;
typedef MyType2* MyType3;
MyType3 a;
我们将从使用清洁器语法开始:
using MyType1 = int*;
using MyType2 = MyType1*;
using MyType3 = MyType2*;
MyType3 a;
现在,该名称不在类型中,很容易看到编译器如何扩展类型。让我们手动做:
// using MyType1 = int*;
using MyType2 = int**;
using MyType3 = MyType2*;
MyType3 a;
然后:
// using MyType1 = int*;
// using MyType2 = int**;
using MyType3 = int***;
MyType3 a;
然后:
// using MyType1 = int*;
// using MyType2 = int**;
// using MyType3 = int***;
int*** a;
但这是真的。类型是类型的别名,它们不是变量,也不是任何运行时实体。这只是编译器通过给您写一个漂亮的名称来写出复杂类型的编译器。
所以不,您不能通过制作太多的Typedef来实现不确定的行为。您可能有未定义的行为是滥用类型,但这是另一回事。
- 关于C++中具有多重继承"this"指针的说明
- 共享指针继承,而不先显式强制转换
- 派生类是从基类继承 v 指针并仅使用它,还是也有自己的 v 指针?
- 使用智能指针附加的继承对象的深层复制
- 嵌套类、继承和C++中的共享指针
- 删除C++中的继承类指针数组
- 具有虚拟指针和继承的 CPP 类大小
- 钻石继承虚拟成员铸造与指针
- 当键是虚拟继承中涉及的基类指针时,对 std::unordered_map 项的访问崩溃
- 当依赖关系和依赖关系都是多态时,在哪个继承级别存储依赖关系指针?
- cppyy 继承包含智能指针的类
- 作为模板参数的成员函数指针在继承的成员函数上失败,如何以及为什么?
- 是否可以将成员作为指针继承
- C++14 不能调用从唯一指针继承的类的复制构造函数或运算符 =
- 是无限的Typedef函数指针继承
- 是否可以从 C++11 智能指针继承并覆盖相关运算符?
- 继承:使用从父指针继承的方法
- 使用智能指针继承的皮条
- 是覆盖返回类型所需的指针-继承
- 调用未从BaseClass指针继承的DerivedClass函数