为什么不能向前声明typedef?

时间:2018-08-19 19:51:47

标签: c++ forward-declaration

编辑:我知道一个人不能转发声明typedef,并且有很多q得出结论(实际上,我链接到一个)。但是他们都没有解释为什么这是不允许的。我不是在寻找解决方法。我想了解基本原理。

事实证明您是can't forward-declare a using-directive(或typedef)。即您不能这样做:

接口:

class Impl;
using Concrete = shared_ptr<Impl>;

实施:

using Impl = std::function<Foo(const Foo&)>; //DOES NOT COMPILE

相反,您必须创建一个包装std :: function的单元素类Impl

禁止这样做的背后原理是什么? AFAICS可以使用诸如class Impl之类的前向声明类型来存储指向Impl的指针或引用……并且即使后来将Impl定义为类似于int或函数指针等等。

(请注意,typename Impl似乎不是向前声明类型的有效方法。)

0 个答案:

没有答案