大家讨论一下,VC2005不支持那些C++标准语言特性!

zogy 2008-03-27 05:58:11
实际使用中,发现了两个,如下:

1、不支持成员模板的默认非类型参数:

template< int m = 0 > class Caa
{
public:
template< typename T = int > class Cbb {};
template< int n = 0 > class Ccc {};
};
Caa<>::Cbb<> g1; // ok
Caa<>::Ccc<> g2; // error

2、不支持两阶段查找(tow-phase lookup)

void Test(void)
{
cout << "1" << endl;
}
template< typename T > struct Caa
{
void Test(void)
{
cout << "2" << endl;
}
};
template< typename T > struct Cbb : public Caa< T >
{
int MemTest()
{
Test(); /* 根据标准,非依赖非受限的名称将马上查找;
此时依赖基类中的成员函数不确定;所以只能
找到全局的函数;GCC执行的是全局的函数;
可VC2005执行的却是是基类中的成员函数 */
this->Test(); /* 受限并依赖的名称只有到实例化时才查找;
此时会找到依赖基类中的成员函数。*/
return 0;
}
};
int g = Cbb< int >().MemTest();
...全文
484 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
paidfighting 2008-04-02
  • 打赏
  • 举报
回复
lz真能研究。。。
zogy 2008-04-02
  • 打赏
  • 举报
回复
纯粹是学术研究,无趣的人不要打扰!
zogy 2008-04-02
  • 打赏
  • 举报
回复
对于第三条,还发现下述有趣问题;如果默认的模板的模板参数值的模板参数(有点绕!)是非类型的,则不会有语法错误,
但是结果却是错的;这应该算是个bug。

template< typename T > struct Caa
{
template< unsigned int nID > struct Cbb // 模板参数是非类型的
{
enum { Value = nID };
};
template< template< unsigned int > class TT = Cbb > struct Ccc
{
static int Show(void)
{
int i = TT< 100 >::Value;
cout << i << endl;
return i;
}
};
};
int i1 = Caa< int >::Ccc<>::Show(); // 应该是100,实际却是1
int i2 = Caa< int >::Ccc< Caa< int >::Cbb >::Show(); // 等于100是对的
taodm 2008-04-02
  • 打赏
  • 举报
回复
省点力气吧。
没人能探讨光,也没人能记全。
不要去穷究语言的细节,留点力气在比如OO方法啦,软件架构啦。。。
zogy 2008-04-02
  • 打赏
  • 举报
回复
3、不支持成员模板默认的模板的模板参数(默认值也是个成员模板)

template< typename T > struct Caa
{
template< typename T2 > struct Cbb // 如果这个模板是全局的,就不会有错
{
typedef T2 Result;
};
template< template< typename > class TT = Cbb > struct Ccc
{
typedef typename TT< int >::Result Type;
static Type Show(void)
{
Type i = Type();
cout << i << endl;
return i;
}
};
};
int i1 = Caa< int >::Ccc<>::Show(); // 语法错误
int i2 = Caa< int >::Ccc< Caa< int >::Cbb >::Show(); // 正确
内容概要:本文围绕基于一致性理论的无人船与自主水下航行器(AUV)多智能体编队控制展开研究,旨在实现多个海洋无人平台在复杂海洋环境下的协同编队运动。研究利用图论和拉普拉斯矩阵建立多智能体系统的通信拓扑结构,通过设计分布式一致性控制协议,使各智能体在仅依赖局部邻居信息交换的情况下,实现对期望编队队形的稳定保持。文章详细阐述了编队控制系统的数学模型、一致性算法设计(包括一阶与二阶动力学系统)及其稳定性分析,并利用Matlab/Simulink工具对编队形成、队形保持、队形变换以及编队避障等多种场景进行了仿真验证,证明了所提方法的有效性和鲁棒性。; 适合人群:具备自动控制、机器人学、海洋工程等相关专业背景,掌握Matlab/Simulink仿真技能,从事多智能体系统、无人系统控制或协同导航研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①为无人船与AUV协同执行海洋勘探、环境监测、搜救等任务提供可靠的编队控制算法;②作为研究分布式协同控制理论在复杂动力学系统中应用的仿真案例;③为开发实际的无人系统编队控制软件模块提供理论基础和代码参考。; 阅读建议:学习者应在理解一致性理论和图论基本概念的基础上,结合文中提供的Matlab代码进行仿真复现与参数调试,重点关注通信拓扑、控制增益等参数对编队性能的影响,从而深入掌握多智能体协同控制的核心设计思想。
内容概要:本文系统阐述了基于遗传算法的模糊PID控制器参数整定方法,通过融合遗传算法的全局寻优能力与模糊控制的动态调节优势,实现对PID控制器比例系数(Kp)、积分时间(Ti)和微分时间(Td)的智能化优化。该方法针对非线性、模型不确定或难以精确建模的复杂控制系统,设计合理的适应度函数以平衡跟踪误差与控制能耗,并借助模糊规则在线调整控制参数,显著提升系统的响应速度、稳定性、鲁棒性及控制精度。文中配套提供了完整的Matlab代码实现方案,并通过单位阶跃响应仿真验证了该方法在减小超调、加快收敛和抑制振荡方面的优越性能。; 适合人群:具备自动控制理论基础和Matlab编程能力,从事控制工程、自动化、机器人、智能制造及相关领域的科研人员、研究生及工程技术人员。; 使用场景及目标:①应用于工业过程控制、智能机器人、无人船/无人机、伺服系统等复杂动态系统的控制器设计;②解决传统PID参数依赖人工整定、适应性差的问题,实现自适应、智能化的参数优化;③作为先进控制算法的教学与科研案例,深入理解遗传算法与模糊控制的协同机制及其在工程实践中的集成应用。; 阅读建议:学习者应结合Matlab代码进行仿真实验,重点掌握适应度函数构造、遗传算法参数配置(如种群规模、交叉与变异概率)以及模糊规则库设计等核心技术环节,并可通过更换被控对象模型或调整优化目标进一步拓展应用场景与研究深度。

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧