gpt4 book ai didi

c++ - 函数模板推导指南?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:22:05 25 4
gpt4 key购买 nike

我正在尝试编写一些接受 std::basic_string 的模板函数或一个字符数组,其中 basic_string可以构造。

我目前的解决方案是:

#include <string>

template<typename CharT>
void foo(std::basic_string<CharT> str)
{
(void)str; // do something with str
}
template<typename CharT>
void foo(CharT const * arr)
{
return foo(std::basic_string<CharT>{arr});
}

int main(void)
{
foo("hello");
foo(std::string{ "hello" });
foo(L"hello");
foo(std::wstring{ L"hello" });
}

但这意味着我必须为每个函数编写另一个调用第一个函数的函数。这很烦人;有更简单的方法吗?也许它可能是一个模板推导指南,但据我所知,它不存在于函数中,只有类。

第一个模板化函数不充分,因为模板推导失败:编译器无法推导 CharTstd::basic_string<CharT>来自 CharT const * .这就是为什么我需要一种更简单的方法来将其告知编译器。

最佳答案

硬着头皮使用 2 个重载。任何聪明的解决方案(如 davidhigh 所示确实存在)只会给下一位读者增加不必要的复杂性、潜在的错误和混淆。

你只写一次,却读了多次。相对于非惯用的复杂聪明方式,编写 1 行 body 重载的小麻烦是值得的。

不要误会我的意思,我喜欢在 C++ 中找到这些智能解决方案,但如果我在生产代码中找到这个解决方案,我会花几分钟时间来弄清楚是什么它到底是什么,它做了什么,只是发现它只是以一种复杂的方式做了本应该是非常基本的事情,我会......好吧,我只是说我不会说作者的好话代码。在编写代码时偷懒会使您在维护、调试、扩展甚至使用代码时花费数倍的时间。

编写简单、惯用且易于理解的代码!

关于c++ - 函数模板推导指南?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42780030/

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