加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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{});

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读