首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >来自文本的静态std::string对象的宏

来自文本的静态std::string对象的宏
EN

Stack Overflow用户
提问于 2014-09-09 17:09:45
回答 4查看 1.7K关注 0票数 18

假设我需要调用一个从代码中大量位置获取常量std::string引用的函数foo

代码语言:javascript
复制
int foo(const std::string&);
..
foo("bar");
..
foo("baz");

像这样使用字符串文字调用函数将创建临时std::string对象,每次都会复制文字。

除非我弄错了,否则编译器不会通过为每个文本创建一个可以在后续调用中重用的静态std::string对象来优化这一点。我知道g++具有高级字符串池机制,但我不认为它会扩展到std::string对象本身。

我可以自己做这个“优化”,这会降低代码的可读性:

代码语言:javascript
复制
static std::string bar_string("bar");
foo(bar_string);
..
static std::string baz_string("baz");
foo(baz_string);

使用Callgrind,我可以确认这确实加速了我的程序。

我想我应该试着为这个做一个宏,但我不知道这是否可能。我想要的是:

代码语言:javascript
复制
foo(STATIC_STRING("bar"));
..
foo(STATIC_STRING("baz"));

我尝试使用文本作为模板参数来创建模板,但事实证明这是不可能的。由于在代码块中定义函数是不可能的,所以我完全没有想法了。

有没有一种优雅的方式来做这件事,或者我将不得不求助于可读性较差的解决方案?

EN

Stack Overflow用户

发布于 2014-09-09 17:19:28

您可以使用Boost.Flyweight创建从const char*std::stringkey-value flyweight。我不确定细节,可能是到处使用flyweight<std::string>就足够了。

票数 1
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25740734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档