编辑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。
答案 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
不同的类型。