gpt4 book ai didi

如果参数之一是字符串,则 C++ 返回类型等于字符串

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

此函数至少应接受 3 种类型:string、int 和 double。它应该将 lval 添加到 rval 并返回它。问题是,如果其中之一是字符串,它应该连接这些值。

例子:lval = 1, rval = "Bruce", return = "1Bruce"

示例:lval = "Tom", rval = 2, return = "Tom2"

例子:lval = 1, rval = 3.0, return = 4.0

我尝试添加名为 T 的第三个类型名称并将其用作 AddObject 类型,但这只是引发了未识别的 T 错误。

template<typename L, typename R>
static L AddObject(L lval, R rval){
return lval + rval;
};

编辑:实现的解决方案代码。

#include <string>
#include <sstream>

using namespace std;

class MathFuncs{
public:

/.../

template<typename L, typename R>
static auto do_add(L lval, R rval, false_type){
return lval + rval;
}

template<typename L, typename R>
static string do_add(L lval, R rval, true_type){
ostringstream oss;
oss << lval << rval;
return oss.str();
}

/*
* Addition function.
*/
template<typename L, typename R>
static auto add(L lval, R rval){
using dispatch_type = integral_constant<
bool,
is_convertible<L, string>{}
|| is_convertible<R, string>{} >;
return do_add(lval, rval, dispatch_type());
}
};

最佳答案

标签分发:

template<class A, class B>
auto do_add(A a, B b, std::false_type /*has_string*/) { return a + b; }

template<class A, class B>
std::string do_add(A a, B b, std::true_type /*has_string*/) {
std::ostringstream oss;
oss << a << b;
return oss.str();
}

template<class A, class B>
auto add(A a, B b) {
using dispatch_type = std::integral_constant<bool,
std::is_convertible<A, std::string>{}
|| std::is_convertible<B, std::string>{}>;
return do_add(a, b, dispatch_type());
}

关于如果参数之一是字符串,则 C++ 返回类型等于字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30184928/

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