Sprout C++库提供constexpr字符串。请参阅:https://github.com/bolero-MURAKAMI/Sprout/blob/master/libs/string/test/string.cpp
前面回答的这个问题解释了为什么我在下面发布的代码不起作用。我有一个后续问题:是否有一种在概念上等效的变通方法,即实现编译时字符串串联,但以C++11实际支持的方式实现?使用std::string是完全不必要的。
constexpr std::string foo() { return std::string("foo"); }
constexpr std::string bar() { return std::string("bar"); }
constexpr std::string foobar() { return foo() + bar(); }
编译时"字符串"串联:
#include <iostream>
#include <string>
template <char ... CTail>
struct MetaString
{
static std::string string()
{
return std::string{CTail...};
}
};
template <class L, class R>
struct Concatenate;
template <char ... LC, char ... RC>
struct Concatenate<MetaString<LC ... >, MetaString<RC ... >>
{
typedef MetaString<LC ..., RC ... > Result;
};
int main()
{
typedef MetaString<'f', 'o', 'o'> Foo;
typedef MetaString<'b', 'a', 'r'> Bar;
typedef typename Concatenate<Foo, Bar>::Result FooBar;
std::cout << Foo::string() << std::endl; // foo
std::cout << Bar::string() << std::endl; // bar
std::cout << FooBar::string() << std::endl; // foobar
}