社区
C语言
帖子详情
如何解决 typename 的命名冲突?
anrxhzh
2002-07-29 12:09:12
struct C {
typedef int it;
};
template <typename T>
struct test {
typedef T::it it;
};
//struct T {}; //如果去掉注释则会造成混乱
int main()
{
test<C>::it i=0;
}
...全文
413
5
打赏
收藏
如何解决 typename 的命名冲突?
struct C { typedef int it; }; template struct test { typedef T::it it; }; //struct T {}; //如果去掉注释则会造成混乱 int main() { test::it i=0; }
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
prototype
2002-07-29
打赏
举报
回复
typedef typename t::it it;
> //struct T {}; //如果去掉注释则会造成混乱
don't know what you exactly mean here. :( what do you refer to by '混乱'?
zheng_can
2002-07-29
打赏
举报
回复
最最简单的解决方法就是不要这么命名
这么短的类名是不被提倡的
anrxhzh
2002-07-29
打赏
举报
回复
使用名字空间也不好解决。
我现在明白为什么在C++库的编写规范中,所有的参数类型名字都为_[A-Z][^_].*,所有的用户类型名字都为[a-z].*了。
tomPeakz
2002-07-29
打赏
举报
回复
我对付这种命名冲突的办法 - namespace
namespace AAA{
typedef int it;
}
namespace BBB{
template <typename T>
struct test {
typedef typename T::it it;
};
}
using namespace AAA;
using namespace BBB;
//or AAA::it BBB::it
划分名字空间
你可以试试。
anrxhzh
2002-07-29
打赏
举报
回复
谢谢 prototype(原型)。
不好意思,我没有表达清楚。实际上我又掉进编译器的陷阱了,如果去掉注释,Microsoft Visual C++ 6.0 就会报错,这是由参数类型T 和全局类型T同名而引起的。我现在已经被这种陷阱搞地麻木了:-)
严格的讲,应该这样写:
struct C {
typedef int it;
};
template <typename T>
struct test {
typedef typename T::it it;
};
struct T {};
int main()
{
test<C>::it i=0;
}
在 Dev-C++ 4.9.4.1 下编译通过。
在 VC 6.0 下通不过。
C++双冒号(::)的5种隐藏用法:从
命名
空间到全局函数调用
本文详解C++作用域解析运算符::在
解决
命名
冲突
、模板元编程(如嵌套类型访问、SFINAE)、友元函数定义、跨平台系统API调用及modern C++中与using协同等五类核心场景的应用。重点涵盖全局作用域显式调用、
typename
::type语法、编译时常量访问、跨
命名
空间友元声明、平台无关系统函数定位,以及using别名与::联合进行类型萃取和简化模板代码。
如何编译期标记一个标识符是一个类
本文探讨了C++中如何使用class关键字声明类指针,特别是在类名
冲突
时的正确用法,以及
typename
关键字的作用,并通过实例展示了不同版本的类声明和
解决
命名
问题的方法。
C++基础(四)缺省参数,重载,函数模版,名字空间
本文系统讲解C++四大基础特性:缺省参数(支持默认值传递与动态表达式求值)、函数重载(基于参数类型/数量差异实现同名多义,依赖Name Mangling机制)、函数模板(通过
typename
参数化类型,支持实参推演与实例化)、名字空间(
解决
命名
冲突
,支持嵌套、无名及别名等高级用法)。内容聚焦语法定义、调用规则、底层原理及典型应用场景,均为C++程序设计关键基础设施。
模板编程中
typename
用法
本文详细介绍了C++模板编程中
typename
的两种关键用法。
typename
常用于定义模板参数,如在泛型交换函数中。另外,
typename
在处理依赖名时至关重要,特别是在限定名和非限定名、依赖名和非依赖名的概念中。当依赖于模板参数的类型名可能出现二义性时,需要使用
typename
来明确标识。示例中展示了
typename
在
解决
类型名与成员变量名
冲突
问题时的作用,强调了
typename
的使用规则及其避免编译错误的重要性。
[C++入门]
typename
的双重含义
文章讲述了
typename
和class在C++模板声明中的区别,强调
typename
用于确保嵌套从属类型名称的正确解析,避免因名称
冲突
导致的编译问题。作者还提供了
typename
的一般性使用规则。
C语言
70,038
社区成员
243,247
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章