一道有意思的google面试题解决方案

一道有意思的google面试题
今天看到一道google的面试题觉得挺有意思:

在C++文件中只declare   class   A,   但不以任何方式define   class   A,   是做什么用?
有兴趣的来讨论讨论

------解决方案--------------------
抽象基类?
------解决方案--------------------
class A
{
public:
virtual run() = 0;
};
------解决方案--------------------
前置声明!~
class A;
class B
{
private:
A* a;
};
------解决方案--------------------
用处可多了,比如用于 静态断言

static_assert
------解决方案--------------------
我不知道
------解决方案--------------------
关注

------解决方案--------------------
能想到的也只有前置声明...
------解决方案--------------------
不懂,没想到有什么用法。
前置声明,后面也一定有define的地方
------解决方案--------------------
隐隐觉得和模板有关系……
------解决方案--------------------
我觉得应该是前置声明吧,Scott在 <effective C++ ed.3> 中item31:为了将文件间的编译依存关系降到最低。
如果说在其它任何地方都没有定义,只能用测试驱动开发(TDD)解释了。
个人偏向于前者。
------解决方案--------------------
只引入名字依赖。名字依赖是C++依赖关系中程度最低的。
------解决方案--------------------
隐隐觉得和模板有关系……
---------
模板中用空定义比较多, class Something{};
------解决方案--------------------
我能想到的就是两个作用.
1` 顺利度过编译期, 等待运行期.
2` 栈占用, 可以在运行期在这段空间内加载相应进程.
------解决方案--------------------
前置说明啦

------解决方案--------------------
前置声明 在后面也是要定义的吗
------解决方案--------------------
不懂
------解决方案--------------------
搜了一圈,还是没有找到解答
------解决方案--------------------
在根本不需要定义的地方,只放一个声明,逻辑上可以降低类之间的依赖程度,物理上也可以提高编译速度。
------解决方案--------------------
在C++文件中只declare class A, 但不以任何方式define class A

只能这么理解了,减少依赖性,具体就是Effective 3rd的Item 31.不过这样题目出得就有些小问题,因为这样肯定在某个文件中有class A的define,只不过不在该C++文件中,但是题目会让人有一定的误解。
------解决方案--------------------
学习

------解决方案--------------------
只声明没有定义的类可以以有限的方式来使它,不能用它来定义对象,但是可以用它来定义指针、引用等。
------解决方案--------------------
template <class T>
Foo;

template <>
Foo <int>
{
//...
};

template <>
Foo <char>
{
//....
};

只能实例化Foo <int> Foo <char> ,因为实例化其他类时,没有定义
就想到这种

顶晨星老大的...
------解决方案--------------------
前置声明...


------解决方案--------------------
貌似可以先确定类的命名空间。
namespace A {
class B;