c++ - 在类中使用 typedef 覆盖现有类型
问题描述
我想用 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++
. 请参阅C++11 中的“typedef”和“使用”有什么区别?.
推荐阅读
- google-apps-script - 编辑特定范围时如何运行函数
- regex - 正则表达式仅允许且仅允许数字
- java - 从文件中读取交替数据类型
- javascript - 添加到当前函数“总计”忽略某些值的逻辑
- javascript - GoogleJsonResponseException:对 drive.files.update 的 API 调用失败并出现错误:用户对此文件没有足够的权限
- javascript - p:calendar 在呈现第一个视图后触发 javascript 方法
- php - 批量更新不向数据库发送任何数组数据
- jquery - 在轮播 jQuery 中跟随按钮添加、删除类
- android - 错误:无法从“12”确定 java 版本
- excel - 如何在 SAP 中使用和循环 Excel 变量