gpt4 book ai didi

c++ - 无法推断 basic_string 的模板参数

转载 作者:太空狗 更新时间:2023-10-29 20:20:54 26 4
gpt4 key购买 nike

我的代码中有这个函数定义:

template <
class CharT,
class Traits = std::char_traits<CharT>,
class Allocator = std::allocator<CharT>
> std::basic_string<CharT, Traits, Allocator> bytes2string(const Bytes& bytes)
{
// do work ...
}

当我尝试这样调用函数时:

int main()
{
Bytes bytes{'H', 'e', 'l', 'l', 'o'};

std::string str = bytes2string(bytes); // error

return 0;
}

我遇到了以下错误:

error: 
no matching function for call to 'bytes2string'

note:
candidate template ignored: couldn't infer template argument 'CharT'
> std::basic_string<CharT, Traits, Allocator> bytes2string(const Bytes& bytes)

我很确定它应该可以工作,但遗憾的是,它没有。还有 Bytes只是一个std::vector<char>以防万一有人想知道。

最佳答案

仔细看看你的签名:

template <
class CharT,
class Traits = std::char_traits<CharT>,
class Allocator = std::allocator<CharT>
> std::basic_string<CharT, Traits, Allocator> bytes2string(const Bytes& bytes);

没有任何东西可以推导出 CharT - 它需要由用户明确提供。


std::string str = bytes2string(bytes);

不幸的是 C++ 没有 Hindley-Milner类型推断——不可能以这种方式推断出返回类型的模板参数。函数模板参数只能通过传递给函数的参数推导出来。

如果您将签名更改为:

template <
class CharT,
class Traits = std::char_traits<CharT>,
class Allocator = std::allocator<CharT>
> void bytes2string(std::basic_string<CharT, Traits, Allocator>& out, const Bytes& bytes);

并调用:

std::string str;
bytes2string(str, bytes);

您的模板参数将被推导。

live example on wandbox

关于c++ - 无法推断 basic_string 的模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47274121/

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