c – 如何在编译时从类型创建静态字符串

我有一堆类型的名字. (他们有更多的功能,但是为了这个讨论的缘故,只有这个名称是相关的.)这些类型和它们的名字在编译时使用宏设置:
#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();}
};

代码在这里被煮沸到可能包含错误的点,但在实践中这很好.

除了它创建,然后在运行时复制相当长的字符串,代表在编译时实际上是众所周知的类型.由于这是在嵌入式设备上运行的性能敏感的一段代码,所以我想改变一下

>列表的字符串理想地在编译时创建,或者如果没有办法做到这一点,一次在运行时,和
>我只需要复制一个指向C字符串的指针,因为根据#1,字符串被固定在内存中.
>这与C 03汇编,我们现在卡住了.

我该怎么做?

(如果这扩大了可用于此的肮脏技巧的武器:foo对象的名称只能由代码创建和读取,并且只有foo_list名称字符串预期是人类可读的.)

解决方法

你可能想看看boost的mpl :: string.我的咖啡踢了一个例子

编辑:咖啡已经踢了…

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...