miaohuawuseng 2016-06-05 03:13 采纳率: 0%
浏览 1746

模板类中怎么根据实例化的参数不同,进行不同的处理?

模板类中怎么根据实例化的参数不同,进行不同的处理?
template
class Unit
{
private:
int value;
UnitType unit;
TYPE type;
public:
bool operator== (Unit & rht);
Unit operator+ (Unit & rht);
Unit();
Unit(int value, UnitType unit);

};

UnitType是模板参数,我想在成员函数中根据实例化时 UnitType的不同,进行分别处理,应该怎么实现。

  • 写回答

1条回答 默认 最新

  • threenewbee 2016-06-05 04:38
    关注
     从设计的角度来说,你的设计根本不符合模板语法特性的使用场景,完全属于“给汽车装上抬轿杆”的设计。
    正确的做法是使用模板设计模式,将你的需要根据UnitType的不同,进行分别处理的代码分散在不同的实现类中,一个基本的框架代码是:
    template <typename UnitType>
    abstract class InInitializer<UnitType>
    {
    public: virtual void foo() = 0;
    };
    根据不同类型初始化:
    比如对于int类型
    class InitInInitializer : InInitializer<int>
    {
    public: void foo() { 你的代码... }
    }
    ...
    在主程序中
    Unit(int value, UnitType unit, InitInInitializer<UnitType> init)
    {
    ...
    init.foo(); // 这样会根据你定义的不同的实现类,自动匹配不同的分别处理的代码
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥35 平滑拟合曲线该如何生成
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站