同时精通 类模板,嵌套类,多模板的进来,用C++ 近十年了解决不了这个问题,惭愧啊!

dext 2009-03-13 02:17:56
如下代码,我连声明都些不出来,勉强写出一个,居然在
g++(Linux), VC++ 2008, MinGW 中 全有错,
意外发现,VC++6 可以通过,很是郁闷。
注:有问题的代码很长,不能写在类里。
代码如下:


#include <iostream>

using namespace std;

template<typename T1, typename T2=void*, typename T3=void*>
class Test {
public:
Test();
class Inter {
public:
T2 t2;
Inter();
};
Inter* get();
Test* ttt();
protected:
private:
T1 t1;
};

template<typename T1, typename T2, typename T3>
Test<T1, T2, T3>::Test() {};

template<typename T1, typename T2, typename T3>
Test<T1, T2, T3>::Inter::Inter() {};

template<typename T1, typename T2, typename T3>
Test<T1, T2, T3>*
Test<T1, T2, T3>::ttt() {};

// 不会写声明,实现更无从说起。这个只有VC++6可通过
template<typename T1, typename T2, typename T3>
Test<T1, T2, T3>::Inter*
Test<T1, T2, T3>::get() {return NULL;};

int main(int argc, char *argv[]) {
printf("Hello, world\n");
return 0;
}
...全文
151 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 dext 的回复:]
呵呵,真的受教了,版主还帮我删了一贴,估计是对我的嘲笑吧。
以前听说过 typename 以为他只是在模板声明中简单的替代了 class。
谢谢 pengzhixi 的最后解释。
[/Quote]
重复发帖了吧.
dext 2009-03-13
  • 打赏
  • 举报
回复
呵呵,真的受教了,版主还帮我删了一贴,估计是对我的嘲笑吧。
以前听说过 typename 以为他只是在模板声明中简单的替代了 class。
谢谢 pengzhixi 的最后解释。
pengzhixi 2009-03-13
  • 打赏
  • 举报
回复
Test<T1, T2, T3>::Inter*//加上typename 否则Inter 会被看做是Test里面的静态成员
北极猩猩 2009-03-13
  • 打赏
  • 举报
回复
Test* ttt();

这个声明是有问题的,Test是一个类模板而不是类,不能直接作为返回值。
应该写成
Test<T1, T2, T3>* ttt();

建议你在模板定义里面直接写typedef Test<T1,T2,T3> ThisType;用起来可以省力一点
  • 打赏
  • 举报
回复

#include <iostream>

using namespace std;

template<typename T1, typename T2=void*, typename T3=void*>
class Test {
public:
Test();
class Inter {
public:
T2 t2;
Inter();
};
Inter* get();
Test* ttt();
protected:
private:
T1 t1;
};

template<typename T1, typename T2, typename T3>
Test<T1, T2, T3>::Test() {};

template<typename T1, typename T2, typename T3>
Test<T1, T2, T3>::Inter::Inter() {};

template<typename T1, typename T2, typename T3>
Test<T1, T2, T3>*
Test<T1, T2, T3>::ttt() {};

// 不会写声明,实现更无从说起。这个只有VC++6可通过
template<typename T1, typename T2, typename T3>
typename Test<T1, T2, T3>::Inter* //<=======加一个typename就可以了
Test<T1, T2, T3>::get() {
return NULL;
};

int main(int argc, char *argv[]) {
printf("Hello, world\n");
return 0;
}
代码下载地址: https://pan.quark.cn/s/068306a56640 在交通运输科学范畴内,交通流量分配是探讨交通系统内交通负荷如何在各个道路路段间进行合理分配的核心议题。交通流分配技术主要应用于模拟和推演交通系统的运行状态,旨在为城市规划人员与交通工程师提供优化道路布局的参考,进而缓解交通拥堵现象,提升道路交通的整体效能。以下将对"交通流分配技术"进行深入阐述: 1. **全部或无分配(All-or-Nothing Distribution)** 全部或无分配是一种基础的交通流分配策略。该技术依据最短路径准则,预设所有从发源地(Origin)至目的地(Destination)的车辆都将选择路程最短的路线。倘若存在多条等长路径,则采用随机方式确定其中一条。此方法未将交通拥堵因素纳入考量,因为一旦选定路径,便假定所有交通量将沿此路径通行,即便这可能导致部分路段出现超负荷状况。 2. **逐步分配(Progressive Assignment)** 逐步分配技术顾及了交通网络的动态特征。该算法通过逐步优化流量配置,力求使网络内行驶的总代价(诸如通行时间、距离等指标)最小化。运算过程始于初始的全部或无分配状态,随后逐步修正路径选择,直至网络达成稳定状态,即每次流量修正后,总代价的变动幅度不再明显。此方法更贴近现实交通场景,因为车辆会依据即时路况选择最优路径。 3. **迭代平均分配(Iterative Average Distribution)** 迭代平均分配是一种对逐步分配技术的优化版本,其更侧重于实现网络流量的均衡化。在每一轮迭代过程中,算法不仅评估当前路径的优化程度,同时参考前一次迭代的流量配置。通过融入平均化理念,该方法能更有效地分散交通...

65,211

社区成员

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

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