【问题标题】:Concept for string-like object类字符串对象的概念
【发布时间】:2021-04-30 09:29:20
【问题描述】:

标准库中是否有类似字符串的对象的概念? 我的意思是像

template<typename T>
concept StringLike = requires(T x) {
   /* is same as const char*, char*, std::string etc */
}

有一个关于手工制作的问题 Type trait for strings。但我找不到任何关于概念的东西。为什么不包含在 std 中?

【问题讨论】:

  • 什么是“类似字符串的对象”?有append吗?还是insert?是否支持std::string 的构造?有size吗?它有length 吗?还是data?您认为这样的概念有什么用?这比使用const std::string&amp;std::string_view 更好吗?

标签: c++ c++20 c++-concepts


【解决方案1】:

我正在寻找一个函数的概念,它只接受 const char*、char* 和字符串

template<class T>
concept StringLike = std::is_convertible_v<T, std::string_view>;

为我做了诀窍:)

【讨论】:

  • 如果您只是要将其转换为string_view,为什么不直接使用std::string_view 类型呢?这个概念的意义是什么,如果唯一的操作你要用它做一个string_view
  • @NicolBolas 我正在编写一个带有可变模板的 python 格式(std::format 尚未实现)模拟,所以我想要可转换为字符串或可以传递给 std::to_string 的参数。也就是说我的格式函数可以用作my_format("{0}", std::string("1"))my_format("{0}", "1")my_format("{0}", 1)
【解决方案2】:

基于

/* is same as const char*, char*, std::string etc */

答案是不,与const char*char*std::string 没有任何相同之处,因为它们是不同的类型。好吧,const char* 只是一个不可修改的char*,但std::string 是完全不同的东西。并且没有什么可以同时与std::stringchar* 相同,就像没有一个整数可以既等于又不等于0。

【讨论】:

  • 我认为你在“和”上挑得太多了,我认为 OP 只是在寻找 const char* or char* or std::string
  • @largest_prime_is_463035818,根据问题的标题,我认为 OP 指的是与这三个可互换的东西。就像一个表达通用接口的概念。不过,不确定。让我们看看他的反馈。
  • @Enlico std::is_convertible_to_v 成功了 :)
  • @SherAndrei,可能你的意思是std::is_convertible_v。那你就可以自己回答了。
猜你喜欢
  • 1970-01-01
  • 2018-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-22
  • 2011-08-31
  • 2017-06-11
  • 1970-01-01
相关资源
最近更新 更多