c++ - 如何获得两种不同类型相乘的结果类型?

标签 c++ class c++11 templates return-type

如何获得将两种不同类型相乘的结果类型,即

template< typename TA, typename TB>
struct multiplier
{
    using result_type = // something here finds result of TA * TB
    result_type operator()( TA a, TB b ) const
    {
        return a * b;
    }
};

我知道在 C++ 中,将两个不同类型的数值相乘是完全有效的,这将给出编译器已知类型的值。 IE。将 doubleint 相乘将得到 double 类型的答案。

因此,在类型在编译时已知的模板类中,应该可以确定将要创建的类型。事实上,可以创建一个 lambda 来返回该值的结果,即

auto foo = [](int a, float b){ return a * b;}
auto c = foo( 13, 42.0 );

这会导致 c 成为 float

请注意,我只能使用 的功能或以下。

最佳答案

您可以使用 decltype 来执行此操作:

using result_type = decltype(std::declval<TA&>() * std::declval<TB&>());

关于c++ - 如何获得两种不同类型相乘的结果类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57464396/

相关文章:

java - 使用静态函数遍历类

c++ - 如何使用非平凡的析构函数防止未使用的变量警告

c++ - 'int [0]' c++ 的初始值设定项太多

c++ - 无法在 VS .NET 2008 中使用 boost::enable_if 专门化成员函数模板

c++ - 启用 OpenCV cuda 的构建不起作用

python - 在索引和值 "for i, v in enumerate(listVar):"上是否有 C++/C++11 类似于 python 迭代?

c++ - 比较 unsigned char 和 signed char

java - 将类传递给 Maven2 插件

c++ - 关于 std::stack push 段错误的问题

javascript - 如何从 Javascript 类构造函数中访问分配给对象的变量名称?