C++模板字符串连接
我正在尝试定义一些像这样的可变参数模板:
typedef const char CCTYPE[];
template<CCTYPE X, CCTYPE... P> struct StringConcat { ... };
这样我就可以编写如下内容:
char foo[] = "foo"; char bar[] = "bar";
std::cout << StringConcat<foo, bar>;
并且它打印了 foobar
。 如果在 C++0x 中可以的话,我该如何做到这一点?
我真正感兴趣的是解决 FizzBuzz 问题使用c ++模板,我找到了一个解决方案这里将int转换为使用模板的 char[]。
I'm trying to define some variadic template like that:
typedef const char CCTYPE[];
template<CCTYPE X, CCTYPE... P> struct StringConcat { ... };
so that I could write sth like:
char foo[] = "foo"; char bar[] = "bar";
std::cout << StringConcat<foo, bar>;
and it printed foobar
.
How can I do this, if it's possible in C++0x?
my real interest is to solve FizzBuzz problem using c++ templates, I found a solution here to convert an int to char[] using templates.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
使用该构造,您应该能够在纯元编程中实现 FizzBuzz。顺便说一句,很好的锻炼。
Using that construct you should be able to implement your FizzBuzz in pure metaprogramming. Nice exercise BTW.
您可以解决使
std::cout << 的问题StringConcat
工作。现在你可以说
希望它有帮助。
You can solve the problem of making your
std::cout << StringConcat<foo, bar>
work.Now you can say
Hope it helps.
不可能的。 foo 和 bar 不是编译时常量。当您可以使用普通的旧函数时,也没有理由这样做:
Impossible. foo and bar are not compile time constants. There is also no reason to do this when you can use plain old functions:
可以采用可变数量的字符。然而,我相信没有现有的方法来连接这样定义的字符串。
It is possible to take variable amounts of characters. However, I believe that there is no existing way to concatenate strings defined like that.
您不能连接两个或多个字符串文字以获取单个字符串文字(除非您想使用宏)。但根据手头的任务,您的模板函数可以返回,例如 std::string,它是字符串文字的串联。后者是微不足道的。
You cannot concatenate two or more string literals expecting to get a single string literal (unless you want to use macros). But depending on the task at hand you can your template function return, for example, a std::string, which is a concatenation of string literals. The latter is trivial.