C模板:我可以调用一个名称基于输入类型名称的函数吗?
发布时间:2020-12-16 10:04:27 所属栏目:百科 来源:网络整理
导读:我有一个代码库,有许多枚举相关函数返回单例.他们的名字是公式化的: enum Foo {...};const MySingleton* Foo_Singleton();enum Bar {...};const MySingleton* Bar_Singleton();... 是否可以编写一个C模板,在没有明确列出所有选项的情况下选择正确的getter函
我有一个代码库,有许多枚举相关函数返回单例.他们的名字是公式化的:
enum Foo {...}; const MySingleton* Foo_Singleton(); enum Bar {...}; const MySingleton* Bar_Singleton(); ... 是否可以编写一个C模板,在没有明确列出所有选项的情况下选择正确的getter函数名? template <typename EnumT> inline const MySingleton* Get() { return EnumT ## _Singleton(); } 我知道我在这里使用了一个荒谬的预处理器指令,但我希望它能传达我的目标.我知道我可以为每个枚举写一个重载,但是它们很多并且维护起来很麻烦,所以我宁愿避免这个解决方案. 解决方法
最简单的方法是更改??命名策略:
enum Foo {...}; const MySingleton* Get(Foo); // instead of const MySingleton* Foo_Singleton(); enum Bar {...}; const MySingleton* Get(Bar); // instead of const MySingleton* Bar_Singleton(); 涉及的机制称为标签调度.现在你可以通过简单的方式得到合适的单例实例: Get(Foo{}); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- webpack, react项目中利用外部JS库提升效率
- 【cocos2d-html5、cocos2dx+jsbinding、cocos2dx-lua】
- Cocos2dx 3.0中创建Animation要用verctor而无法使用array
- ruby-on-rails-3 – 设计(1.3.4自己),Omniauth使用ldap
- graphite – 来自不同实例的聚合数据
- Swift Tutorial(swift 教程) 1: Welcome to Programming
- String.equalsIgnoreCase(…)等效于Ruby
- SOLID原则之依赖倒转
- 正则表达式,对html内容匹配分组更改(替换/调换)内容
- 使用XSD验证XML但仍允许可扩展性