gpt4 book ai didi

C++ 模板特化思考

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:21:40 26 4
gpt4 key购买 nike

我遇到了一个应该用模板解决的奇怪情况,但由于某种原因我找不到正确的方法。

对于大多数基本类型(int、bool、char、double、long...)我使用这个函数:

template <typename T>
T foo(T val);

特殊情况是字符串,因为在所有情况下向函数发送参数都是通过发送引号文本(如 "blah")推导为 const char* ,并且返回值必须是 std::string,如下所示:

template ?
std::string foo(const char* val);

所有基本类型的代码都是一样的,但是string的情况比较特殊,因为参数和返回值的类型不一样,string case需要和基本类型不同的代码案例。

我尝试了各种奇怪的组合来实现编译和工作的代码,但我失败了。我需要一个比一遍又一遍地编写相同代码更优雅的解决方案。

谢谢!

最佳答案

只需添加一个非模板重载:

std::string foo(const char* str)
{
return foo(std::string{str});
//or
// return foo<std::string>(str);
}
std::string foo(char* str); // might need this too

根据你的情况,你可以考虑这个拳头(或代替):

template <std::size_t N>
std::string foo(const char(&str)[N])
{
return foo(std::string{str});
//or
// return foo<std::string>(str);
}

字符串文字属于数组类型,但它们会退化为指针。例如。 “asd”的类型为 const char[4]。所以这更适合字符串文字。

关于C++ 模板特化思考,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31961881/

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