c++ - 显式返回模板参数

标签 c++ c++14

我有一个接受“auto”并返回“auto”的函数。此函数采用数字类型(例如,复数、整数或 double )。但是,根据函数的结果,我需要明确地返回一些东西。例如,如果将一个复数传递给函数,如果该数的“实”部分小于零,我需要返回“complex(0, 0)”。代码如下所示:

if(myNumber<0){ return 0.0;} else{ return myNumber; }

现在我当然必须重载“小于”运算符,但困难的部分是当 myNumber 不是 double 时如何允许返回 0。我已重载“=”运算符以允许将 double 赋值给复数,但我仍然遇到编译错误。

有没有什么好的方法可以做到这一点?

编辑:

我的完整代码如下所示。

auto BSCall(const auto &S0, const auto &k, const auto &discount, const auto &sigma){ 
if(sigma<=0){
    return 0.0;
}
else{
    double s=sqrt(2.0);
    auto d1=log(S0/(discount*k))/(sigma)+sigma*.5;
    return S0*(.5+.5*erf(d1/s))-k*discount*(.5+.5*(erf((d1-sigma)/s)));  
}}

再次编辑:

事实证明,我的类(class)没有采用 double 的构造函数。当我同时重载运算符“=”和具有单个 double 的构造函数时,我的代码有效。

最佳答案

我看到两种方式:

首先是尝试初始化列表:

if(myNumber<0){
    return {};   //  <= it means you return T()
}else{
    return myNumber;
}

其次是使用来自 type_traitsstd::result_of标题。

if(myNumber<0){
    return std::result_of<YourFunctionReference>::type();
}else{
    return myNumber;
}

当然,您的函数是模板化的,所以我不太确定第二种方法是否可行。请发布您项目中的其他代码,以便我能够告诉您如何在您的案例中使用 std::result_of

关于c++ - 显式返回模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34568402/

相关文章:

c++ - FPS 相机实现错误(OpenGL/GLUT/C++)

c++ - 如何丢弃 IUpdateSearcher::BeginSearch

c++ - 使用 constexpr 函数的返回值作为另一个函数的参数

c++ - 解释字符串修剪功能

c++ - 将迭代器中的数据插入列表的问题

c++ - 我处理这个的方式有内存问题吗?

c++ - 如何使用 Doxygen 记录应用程序源文件

c++ - 使用键值对为零的 k 个桶初始化 c++14 unordered_map

c++ - 在其他 vector 上使用索引相关函数初始化 const vector

c++ - 避免在字符串中进行 if-else 分支以进行类型调度