std 相关问题

C ++标准库及其命名空间。与[c ++]结合使用。

如何将模板参数传递给std::function?

我有一些模板函数可以在我的 C++ 项目中将向量聚合成字符串。我需要使用 std::function 将聚合算法从一个函数传递到另一个函数。 模板 我有一些模板函数可以在我的 C++ 项目中将向量聚合成字符串。我需要使用 std::function 将聚合算法从一个函数传递到另一个函数。 template<typename T> requires (is_convertible_v<T, BYTE> || is_convertible_v<T, CHAR> || is_convertible_v<T, WCHAR> || is_convertible_v<T, LPCSTR> || is_convertible_v<T, LPCWSTR>) LPCWSTR StringHelper::ImplodeVectorToStringW(vector<T> vectorValues, LPCWSTR lpcwszSeparator) { wstring wstrSeparator(lpcwszSeparator); function<wstring(wstring, T)> fn = [&](wstring total, T current) -> wstring { return total + lpcwszSeparator + ToWString(current); }; wstring wstrResult = Aggregate(vectorValues, wstring(L""), fn); LPCWSTR lpcwszResult = GetStringBufferW(wstrResult); return lpcwszResult; } template<typename TRet, typename TValue> basic_string<TRet> Aggregate(vector<TValue> vectorValues, basic_string<TRet> initValue, function<basic_string<TRet>(basic_string<TRet>, TValue)> fnReduce) { basic_string<TRet> total = initValue; for_each(vectorValues.begin(), vectorValues.end(), [&](TValue current) { fnReduce(total, current); }); return total; } template<typename T> requires (is_convertible_v<T, BYTE> || is_convertible_v<T, CHAR> || is_convertible_v<T, WCHAR> || is_convertible_v<T, LPCSTR> || is_convertible_v<T, LPCWSTR>) wstring StringHelper::ToWString(T Value) { wstring wstrResult; if constexpr(is_convertible_v<T, BYTE>) { wstrResult = to_wstring((BYTE)Value); } else if constexpr(is_convertible_v<T, CHAR>) { wstrResult = AnsiToUnicode(string(1, (CHAR)Value).c_str()); } else if constexpr(is_convertible_v<T, WCHAR>) { wstrResult = wstring(1, (WCHAR)Value); } else if constexpr(is_convertible_v<T, LPCSTR>) { wstrResult = AnsiToUnicode((LPCSTR)Value); } else if constexpr(is_convertible_v<T, LPCWSTR>) { wstrResult = (LPCWSTR)Value; } return wstrResult; } 但是当我调试这段代码时,函数 fn 被初始化为以下值: fn = wstrSeparator = L" "; 不适用于所需的 lambda 表达式。怎么了? 您在函数模板 Aggregate 中所做的事情是调用可调用 vectorValues 的每个元素 fnReduce ,依次复制输入参数 total 和 current 对它们执行某些操作,然后返回您的值丢弃。它相当于NOOP。您到底期望这里发生什么? 学习基本的C++。这不是 Python、Java 或 C#,其中对象默认动态存储。 首先,您进行了大量的字符串复制,这不好,因为您进行了很多不必要的数据复制。 比如说,你可以通过替换来修复它: function<wstring(wstring&, T const&)> fn = [&](wstring& total, T const& current) { total += lpcwszSeparator; total += ToWString(current); }; 然后,您只需要调整 Aggregate 参数即可使其工作。或者您可以按照@Jarod42的建议进行操作:将 for_each 中的调用替换为 total = fnReduce(total, current); ,速度较慢但更简单。

回答 1 投票 0

为什么我不能“zip”左值“生成器”?

以下简单程序编译并运行: std::generator get_ints(int n) { 对于 (int i{0}; i < n; ++i) co_yield i; } int main(int argc, char* argv[]) { std::vec...

回答 1 投票 0

如何在模板中调用具有不同参数数量的函数?

我希望我的模板能够采用具有不同数量参数的 lambda 并能够处理它们。 在下面的代码中,模板过程接受可调用对象(函数),但不知道是否通过

回答 1 投票 0

使用 Rust std::process crate 将“p”键盘按下发送到 CLI 中的 MPV

我正在尝试创建一个在 CLI 实现中与 MPV 交互的程序 让 mut 输出 = Command::new("mpv") .arg(selected_song.unwrap()) .arg("--无视频") ...

回答 1 投票 0

为什么没有int128_t?

许多编译器都提供 128 位整数类型,但我使用过的编译器都不提供 typedefs int128_t。为什么? 据我记得,标准 为此目的保留 int128_t 鼓励...

回答 1 投票 0

为什么 MSVC std::exponential_distribution::max() 返回 inf?

为什么下面的代码会用最新的MSVC++打印inf? #包括 #包括 int main() { std::random_device rd; std::mt19937 gen(rd()); 标准::

回答 1 投票 0

std::ranges / std::filter 的使用无效

下面是尝试使用 std::ranges 库查看映射并仅返回第一个元素的最小示例,以便 int 从一个开始是连续的。然而,...

回答 1 投票 0

C++,输出中没有任何内容[重复]

我是 C++ 新手,如果它太明显了,我很抱歉。我在这里编写了一个非常简单的文件,但是当我运行 g++ main.cpp 时,它没有给我任何输出。我缺少什么? #包括 使用

回答 3 投票 0

如何将值从数组复制到结构数组?

在下面的代码中,我可以使用 std::ranges::transform 的便捷语法将值从结构数组 (AoS) 复制到数组结构 (SoA)(在本例中,只有一个向量)。有没有...

回答 1 投票 0

可以“使用命名空间 std;”和“std::cout”一起使用?

使用using namespace std时不会出现错误;和 std::cout 在一起。这两个可以一起用吗? #包括 使用命名空间 std; int main() { std::cout << "

回答 3 投票 0

C++11 auto、std::function 和对重载函数的不明确调用

我想知道是否有人知道为什么以下示例无法编译,给出对重载函数错误的模糊调用。如果我用强类型函子签名替换 auto,那么它就是......

回答 1 投票 0

std::unique_ptr 释放对象时会自动释放内存吗?

我需要一个对象级变量(TIniFile* ini)。在过去,代码示例和/或约定将是新建/删除对象,如下所示: frmMain.h ... 私人的: TIniFile* ini; ...

回答 1 投票 0

std::unique_ptr 是否按照我的想法做?

我需要一个对象级变量(TIniFile* ini)。在过去,代码示例和/或约定将是新建/删除对象,如下所示: frmMain.h ... 私人的: TIniFile* ini; ...

回答 1 投票 0

这符合我的想法吗:std::unique_ptr

我需要一个对象级变量(TIniFile* ini)。在过去,代码示例和/或约定将是新建/删除对象。 frmMain.h ... 私人的: TIniFile* ini; ... 构造函数 ... ...

回答 1 投票 0

为什么std::条件拒绝T&?

我想如果模板参数为void则返回void,如果模板参数为T则返回T&。所以,我编写了下一个MRE代码: #包括 模板 结构体 Foo {

回答 1 投票 0

std::向量移动赋值与移动构造:为什么“其他”的状态不一致?

对于移动构造: 移动后,other 保证为空()。 1 对于移动分配,经常引用的: other 之后处于有效但未指定的状态。 2 为什么是其他的状态

回答 1 投票 0

为什么没有atomic::try_load_for和try_store_for,类似于C++中的timed_mutex?

我有一个程序,我想保证在循环内取得进展,因为它需要响应安全关键事件。我的想法是为所有可以...

回答 1 投票 0

如果我修改一个元素并从不同线程在同一容器(例如 std::unordered_map)上插入一个元素,它是线程安全的吗?

我有一个容器 std::unordered_map> myMap; 和一个互斥体 std::mutex myMutex。 当我尝试访问 myMap 时,我使用 myMutex,如下代码所示: 无效插入...

回答 1 投票 0

可变参数个数的函数调用是否可以在没有模板的情况下实现在C++文件中隔离?

我希望下面代码中的执行器模板是一个独立的C++文件,以减少编译时间并提高绝缘性。 它作为模板工作得很好,但我看不到一个简单的 w...

回答 1 投票 0

如何判断容器类型中的项目顺序是否任意?

C++ 中的一些容器是故意有序的,例如std::list、std::vector 或 std::map(甚至 std::deque,尽管人们可能会质疑它是否具有一个顺序或两个同等有效的顺序)。

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.