首页 > 后端开发 > C++ > 正文

C++如何使用模板实现策略选择模式

P粉602998670
发布: 2025-09-17 12:30:17
原创
917人浏览过
C++中通过模板结合函数对象或lambda实现策略模式,编译期绑定策略以消除运行时开销。定义如Ascending、Descending等函数对象并重载operator(),再通过模板参数传入Sorter类,实现不同排序逻辑。例如Sorter<Ascending>在编译期生成升序排序代码,避免虚函数调用。C++11后可直接传入lambda,如按奇偶性排序的闭包,并利用decltype推导类型。为简化使用,可用using定义类型别名,如using AscendingSorter = Sorter<Ascending>,提升可读性。该方式具备高性能、类型安全和灵活性,但每种策略组合会实例化独立模板,可能增大代码体积,且要求统一调用接口。若需运行时切换策略,则需改用std::function或虚函数机制。因此,模板策略模式适用于编译期确定行为、追求效率的场景,是泛型编程中实现高内聚低耦合的经典实践。

c++如何使用模板实现策略选择模式

在C++中,可以通过模板结合函数对象(仿函数)或lambda表达式来实现策略选择模式,这种方式在编译期完成策略绑定,避免运行时多态的开销,同时保持代码的灵活性和可扩展性。

使用函数对象作为策略

定义多个结构体或类作为具体策略,每个策略实现相同的调用接口(如重载

operator()
登录后复制
),然后通过模板参数传入主算法类。

例如,实现一个排序器,支持不同比较策略:

struct Ascending {
    bool operator()(int a, int b) const {
        return a < b;
    }
};

struct Descending {
    bool operator()(int a, int b) const {
        return a > b;
    }
};

template<typename Strategy>
class Sorter {
    Strategy strategy;
public:
    void sort(std::vector<int>& data) {
        std::sort(data.begin(), data.end(), strategy);
    }
};
登录后复制

使用方式:

立即学习C++免费学习笔记(深入)”;

std::vector<int> nums = {3, 1, 4, 1, 5};
Sorter<Ascending> asc_sorter;
asc_sorter.sort(nums); // 升序排列

Sorter<Descending> desc_sorter;
desc_sorter.sort(nums); // 降序排列
</font>
登录后复制

使用lambda表达式作为策略

C++11以后,lambda也可作为模板策略传入,适合简单逻辑。

AiPPT模板广场
AiPPT模板广场

AiPPT模板广场-PPT模板-word文档模板-excel表格模板

AiPPT模板广场 147
查看详情 AiPPT模板广场

例如:

auto custom_cmp = [](int a, int b) {
    return (a % 2) < (b % 2); // 按奇偶性排序
};

Sorter<decltype(custom_cmp)> custom_sorter;
custom_sorter.sort(nums);
登录后复制

编译期策略选择与类型别名

为简化使用,可用

using
登录后复制
定义常用策略组合:

using AscendingSorter = Sorter<Ascending>;
using DescendingSorter = Sorter<Descending>;
登录后复制

这样用户无需显式写模板参数,直接声明即可:

AscendingSorter sorter;
sorter.sort(data);
登录后复制

优势与注意事项

优势:

  • 性能高:策略在编译期确定,无虚函数调用开销
  • 类型安全:错误在编译期暴露
  • 灵活:支持函数对象、lambda、普通函数指针等多种形式

注意:

  • 每种策略组合会实例化新的模板类型,可能增加代码体积
  • 策略接口需统一,通常通过调用操作符一致化
  • 若需运行时切换策略,仍需结合std::function或虚函数
基本上就这些。模板策略模式适合在编译期确定行为的场景,结合泛型编程能写出高效且清晰的代码。

以上就是C++如何使用模板实现策略选择模式的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号