别名vs空新的扩展类

时间:2017-09-15 21:29:20

标签: c++

编辑2:

好的,我可以重新解释这个问题,除了不同的类型之外,空扩展类和它的基类之间是否存在差异?就像内存大小一样,它们在功能上是等价的吗?

这个完全空的类定义与别名的编译代码和/或性能有什么不同吗?或者这取决于编译器,在这种情况下,它可能会被优化掉?

class MyClass : MyTemplateClass<int>{};
using MyClass = MyTemplateClass<int>;

我想使用类定义,因此我可以转发声明它并更容易避免循环依赖。

循环依赖:

Master.h

class Master {
    void run();
    State s;
}

State.h

class State {
    void Modify(MyClass&);
}

MyTemplate.h

template<typename T>
class MyTemplateClass<int> {
    void run(Master* pMaster) {
         pMaster->run();
    }
};

using MyClass = MyTemplateClass<int>;

“State.h”需要包含“MyTemplate.h”,“Template.h”需要包含“Master.h”,“Master.h”需要包含“State.h”,完成圆圈。如果MyClass不是别名而是实际类,则State不需要包含模板,并且可以转发声明MyClass。

1 个答案:

答案 0 :(得分:1)

让我们看看:

#include <iostream>
#include <typeinfo>

template<class T> struct MyTemplateClass {};

class MyClass1 : MyTemplateClass<int>{};

using MyClass2 = MyTemplateClass<int>;


int main()
{
    std::cout << typeid(MyClass1).name() << std::endl;
    std::cout << typeid(MyClass2).name() << std::endl;
}

示例输出:

8MyClass1
15MyTemplateClassIiE

不同的类型。