gpt4 book ai didi

c++ - 令ss为std::stringstream。如何为(ss << some_type).str()指定概念是std::string?

转载 作者:行者123 更新时间:2023-12-01 14:39:50 26 4
gpt4 key购买 nike

令ss为std::stringstream。如何指定(ss << some_type).str()的概念是std::string?

这是我到目前为止的代码:

#include <iostream>
#include <sstream>

namespace detail {
template< class T, class U >
concept SameHelper = std::is_same_v<T, U>;
}

template< class T, class U >
concept same_as = detail::SameHelper<T, U> && detail::SameHelper<U, T>;

template<typename T>
concept ssToStr = requires(T a, std::stringstream ss) {
{ (ss << a).str() } -> same_as<std::string>;
};

void call(ssToStr auto obj)
{
std::stringstream ss;
std::cout << (ss << obj).str() << std::endl;

}

int main()
{
call("Hi");
return 0;
}

You can check online that the code does not compile.
错误消息的第一部分显示为:
<source>:25:5: error: no matching function for call to 'call'

call("Hi");

^~~~

最佳答案

您缺少#include <sstream>
给出错误消息的修复程序包括:

<source>:14:17: note: because '(ss << a).str()' would be invalid: no member named 'str' in 'std::basic_ostream<char>'

{ (ss << a).str() } -> same_as<std::string>;

告诉您 (ss << obj)的计算结果为 std::ostream,而没有 .str()成员。您只需要检查 ss<<a即可编译,并且您已经知道 ss.str()会生成字符串,因此您不需要在约束中使用它。

不幸的是,我对约束的了解不足,无法为您创建工作代码。

关于c++ - 令ss为std::stringstream。如何为(ss << some_type).str()指定概念是std::string?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60552631/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com