- 论坛徽章:
- 0
|
用模板元编程实现的 "字符串" "函数" 库。
支持的 "函数" 举例:
u_strlen: 计算长度
u_strcat: 合并两个字符串
u_substr: 取得子串
u_get_char_at: 取得特定位置的字符
u_strchr: 查找字符在串中最先出现的位置
u_strrchr: 查找字符在串中最后出现的位置
u_strstr: 查找子串在串中最先出现的位置
u_strrstr: 查找子串在串中最后出现的位置
字符串模板基于一个type array结构,所有运算都可以在编译时完成。
起初的用途是在另一个项目里,用来提供更好的正则表达式匹配。
(比较郁闷的是,写完发现用boost里面的mfl,可以极其轻松的完成类型数组的功能,
早看一下就不用自己写复杂的type array了)
简单的示例如下(附件是完整代码):
- #include <cstdio>
- #include "./include/u_type_string.hpp"
- using namespace utl;
- template <class T, class P, unsigned int position>
- struct __print_char
- {
- inline static void callback (P ¶m)
- {
- //printf ("%c - %d\n", T::m_ch, position);
- printf ("%c", T::m_ch);
- }
- };
- template <typename S>
- inline void print_str ()
- {
- typedef typename u_regular_str <S>::string_t string_t;
- //采用for each模板将字符逐个打印出来。
- u_tarr_for_each_range <string_t, __print_char, const int, 0, u_strlen <S>::m_length> (0);
- printf ("\n");
- }
- int main ()
- {
- /* <1> Define string1: "abcd" */
- typedef u_str <'a', 'b', 'c', 'd'> string1;
- /* Print string1 */
- print_str <string1> ();
- /* Print length of string1 */
- printf ("length is: %d\n", u_strlen <string1>::m_length);
- /* <2> Test strcat */
- typedef u_str <'1', '2', '3'> string2;
- typedef u_strcat <string1, string2> string3;
- typedef u_strcat <string3, string2> string4;
- /* Print string4 */
- print_str <string4> ();
- /* <3> Test strchr and strrchr */
- printf ("Search first char in string: %d\n",
- u_strchr <string4, 's'>::m_position);
- printf ("Search last char in string: %d\n",
- u_strchr <string4, '2'>::m_position);
- /* <4> Test strstr and strrstr(last index of substring) */
- printf ("Search first sub-string in string: %d\n",
- u_strstr <string4, string2>::m_index);
- printf ("Search last sub-string in string: %d\n",
- u_strrstr <string4, string2>::m_index);
- /* <5> Test substr */
- typedef u_substr <string4, 2> sub_string;
- printf ("sub-string: ");
- print_str <sub_string> ();
- /* <6> Test get_char_at */
- printf ("Char at 0: %c\n",
- (char) u_get_char_at <sub_string, 0>::m_ch);
- printf ("Char at 2: %c\n",
- (char) u_get_char_at <sub_string, 2>::m_ch);
- return 0;
- }
复制代码 |
|