C 风格字符串作为模板参数
在 C 编程领域,您可能遇到过一个困境:尝试使用 C-样式字符串作为模板参数。本文深入探讨了这个问题和潜在的解决方法。
以下代码片段说明了这一尝试:
<code class="cpp">template <char *str> struct X { const char *GetString() const { return str; } }; int main() { X<"String"> x; cout << x.GetString(); }
但是,尽管类定义中没有编译错误,但实例化会产生错误消息。问题在于尝试使用字符串文字作为模板参数,而编译器不支持该参数。
一个简单的解决方案是将字符串文字替换为字符指针:
<code class="cpp">char global_string[] = "String"; template <char const *str> struct X { const char *GetString() const { return str; } }; int main() { X<global_string> x; cout << x.GetString(); }</code>
此代码将成功编译并执行,允许您使用 GetString 方法检索存储的字符串。
请注意,随着 C 11 的出现,现在可以使用字符将字符串文字用作模板参数包。但是,对于支持早期 C 版本的编译器,此处提供的解决方法仍然是一个可行的选择。
以上是C 风格字符串可以作为 C 中的模板参数吗?的详细内容。更多信息请关注PHP中文网其他相关文章!