c – 如何在编译时从类型创建静态字符串
发布时间:2020-12-16 05:39:11 所属栏目:百科 来源:网络整理
导读:我有一堆类型的名字. (他们有更多的功能,但是为了这个讨论的缘故,只有这个名称是相关的.)这些类型和它们的名字在编译时使用宏设置: #define DEFINE_FOO(Foo_) struct Foo_ : public foo_baseFoo_ { static char const* name() {return #Foo_;} } 然后
我有一堆类型的名字. (他们有更多的功能,但是为了这个讨论的缘故,只有这个名称是相关的.)这些类型和它们的名字在编译时使用宏设置:
#define DEFINE_FOO(Foo_) struct Foo_ : public foo_base<Foo_> { static char const* name() {return #Foo_;} } 然后,这些类型在编译时列表(经典的简单递归编译时列表)中组合,从中我需要通过连接其对象的名称来创建列表的名称: template<class Foo,class Tail = nil> struct foo_list { static std::string name_list() {return Foo::name() + "-" + Tail::name();} }; template<class Foo> struct foo_list<Foo,nil> { static std::string name_list() {return Foo::name();} }; 代码在这里被煮沸到可能包含错误的点,但在实践中这很好. 除了它创建,然后在运行时复制相当长的字符串,代表在编译时实际上是众所周知的类型.由于这是在嵌入式设备上运行的性能敏感的一段代码,所以我想改变一下 >列表的字符串理想地在编译时创建,或者如果没有办法做到这一点,一次在运行时,和 我该怎么做? (如果这扩大了可用于此的肮脏技巧的武器:foo对象的名称只能由代码创建和读取,并且只有foo_list名称字符串预期是人类可读的.) 解决方法
你可能想看看boost的mpl :: string.我的咖啡踢了一个例子
编辑:咖啡已经踢了… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |