在类内部用typedef覆盖现有类型
Overwriting existing type with typedef inside a class
我想用typedef覆盖一个类型。这样做的理由是,我的一个类有很多模板,我想用模板化的类替换对该类的所有调用(这样在另一个类中Achild
意味着Achild<T>
。但是,我得到了一个错误。
template <typename T>
class Achild
{
public:
Achild<T>() = default;
};
class Foo
{
typedef Achild<int> Achild;
public:
Foo() = default;
};
int main()
{
auto foo = new Foo();
}
我得到以下错误:
new_test.cpp:12:22: error: declaration of ‘typedef class Achild<int> Foo::Achild’ [-fpermissive]
typedef Achild<int> Achild;
^~~~~~
new_test.cpp:2:10: error: changes meaning of ‘Achild’ from ‘class Achild<int>’ [-fpermissive]
class Achild
我怎样才能让它发挥作用?该示例仅用于示例,我这样做的原因还与如何使用现有的代码库有关。
您正在将类型本身别名(Achild
自从在类中声明以来就已经是一个类型了(。你应该改为:
using Child = Achild<int>;
请注意,您还应该使用关键字using
而不是typedef
,因为它在C++
中是等效的(而且更健壮(。请参阅';typedef';和';使用';在C++11中?。
相关文章:
- 使用不同的返回类型覆盖虚拟函数
- C++ 使用不同的返回类型覆盖虚拟函数
- 给定这两种类型,我是否可以确定虚拟函数是否已被覆盖?
- 错误消息:不允许抽象类类型 "X" 的对象:纯虚拟"Y"没有覆盖器
- 无法键入 def std::chrono::microseconds 以覆盖其定义以更改其基础类型
- 当读取错误类型时,CIN覆盖我的初始化值
- 工会如何用于避免类型覆盖
- C++ 重载和覆盖 - 无法使用类型的右值初始化类型的参数
- 衍生模板类的覆盖返回类型
- 仅适用于某些模板类型的覆盖方法
- 抽象类型的对象 - 覆盖不起作用吗?
- 覆盖运算符<<适用于所有类型
- 虚拟函数、覆盖它们的类模板以及不完整的类型
- 覆盖方法返回类型,在C 中使用不完整的派生类
- C 多重继承,虚拟方法覆盖问题和协变量返回类型
- 与基类不同的返回类型的C 覆盖功能
- 警告LNK4206:找不到预编译类型信息; 未链接或覆盖;链接对象,就好像没有调试信息一样
- 如何为基本类型(浮点型)编写替换,以覆盖 运算符 == C++
- 仅覆盖模板中某些类型的函数
- 多个类型覆盖成员函数的模板部分特化