gpt4 book ai didi

c++ - 查明 std::ostream& 是否引用全局对象

转载 作者:搜寻专家 更新时间:2023-10-31 00:51:19 26 4
gpt4 key购买 nike

如果是下面的方法

template<typename... Args>
void report(std::ostream&str, Args&&... args)
{
(str << ... << args);
}

从具有相同str的不同线程同步调用,来自不同线程的写入可能被破坏。因此,我改用

template<typename... Args>
void report(std::ostream&str, Args&&... args)
{
std::ostringstream ostr;
(ostr << ... << args);
str << ostr.str();
}

现在,我想知道是否有可能检测这是否确实有必要,即

{
if(is_global_object(str)) { // how to implement this?
std::ostringstream ostr;
(ostr << ... << args);
str << ostr.str();
} else
(str << ... << args);
}

问题:如何实现is_global_object(str)?我很乐意检测所有 std::coutstd::wcoutstd::clogstd::wclogstd::cerrstd::wcerr

最佳答案

不,绝对不可能。如果一个线程要创建一个本地 ostream 然后将对它的引用传递给另一个线程会怎样?不是全局性的,但仍然共享。对象的全局性并不能决定它的局部性。

关于c++ - 查明 std::ostream& 是否引用全局对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55530383/

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