C++模板参数使用字符串,往往局限性很大
下面是几种使用字符串作为模板参数的示例:
extern char buf[] = "hello";
template<const char* str>
constexpr auto f() { return str; }
constexpr auto ssr = f<buf>();
这一种是使用具有外部链接的变量buf作为模板参数。
template<const char* str>
constexpr auto f() { return str; }
inline int Main() {
static char buf[] = "hello";
constexpr auto ssr = f<buf>();
.........
这一种是使用无连接属性的buf作为模板的参数
struct MyStr {
public:
const char* _str = "";
size_t size = 0;
};
template<MyStr sr>
constexpr auto ss() {
return sr;
}
inline int Main() {
constexpr MyStr buf{ "hello",6 };
constexpr auto ssr = ss<buf>();
......
最后这一种是作为一个自定义类型传递给模板参数,具体的自定义类型作为模板参数的规则可以在C++20标准中进行查阅。
注意:字符串模板参数,不能是字面量,因为模板参数不支持右值引用类型,所以他必须是一个可持续保存的值类型,这与int或者char这样的单个值是不一样的。