【问题标题】:c++ Generic function to divide any data type?c ++通用函数来划分任何数据类型?
【发布时间】:2017-06-03 20:54:46
【问题描述】:

我正在尝试使用单个函数来划分常用数据类型(int、double、float、long、string、char)并且无法将通用字符串转换为数字类型。这是我目前所拥有的:

template <typename T>
T const& Division(T const& a, T const& b)
{
    if (typeid(a) == typeid(string))
    {
        stringstream ss;
        float first, second;
        ss << a; 
        ss >> first;
        ss << b;
        ss >> second;

        stringstream output;
        output << first / second;
        T result;
        output >> result;

        return result;
    }   
}

【问题讨论】:

  • “我正在尝试使用单个函数来划分任何数据通用类型” - 这听起来不太好,您的代码尝试证明了这一点。你到底想解决什么问题?
  • 任何类型?如果我定义一个 Person 类怎么办? person1 / person2 是什么意思?充其量是荒谬的。
  • 什么麻烦?请阅读minimal reproducible example
  • 在泛型函数中做特定类型的东西不被认为是不好的做法吗?
  • @Dr.是的。如果你需要具体,那么你应该specialise模板。或者完全采用不同的方法。

标签: c++ string templates generics type-conversion


【解决方案1】:

由于除法总是需要特定于您的类型的细微差别,因此通用模板函数不是一个好方法。

但是您可以根据具体情况重载除法运算符。例如,对于一个类Foo,在使用之前确保这个函数的原型在翻译单元中:

Foo operator/ (const Foo& numerator, const Foo& denominator){
    // ToDo - your code here, and return a newly constructed Foo.
}

这在调用站点的语法上也更可口。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多