在类模板中创建模板函数对象

Creating template function object in a class template

本文关键字:建模 函数 对象 创建      更新时间:2023-10-16

在我之前的问题中,我正在询问其他类模板中类模板的参数类型。

简而言之,在类中,我可以通过创建一个对象并调用它来调用成员函数,或者直接使用范围解析运算符。现在,我想在以下 2 个类模板中使用它。第一类模板是:

template<typename T>
class Point {
  public:
      //constructor
      Point () { }
      //initialise the vector 
      Point(std::vector<T> &vector);
      //deconstructor
      ~Point () { }
      //to calculate distance between two points
      T distance(const Point &p1, const point &p2);
      //members
      std::vector<T> data_points;
      int dimensions;
      int name;
      };

第二个类模板是:

template<typename T> 
class calculate {
public:
  bool initialise(const std::vector<Point<T>> &points);
  bool load_points(const std::string &filepath, std::vector<Point<T>> *dpt);
  const std::vector<Point<T>> &getPoints() const 
      {
        return points;
      }
  const std::vector<Point<T>> &getMeans() const 
      {
        return means;
      }
private:
  std::vector<Point<T>> means;
  std::vector<Point<T>> points;
};

以下是一段"main.cc":

//inside int main()
int main(int argc, char *argv[])
{
...
...
std::vector<Point<double>> points;
calculate<double>::load_points(filepath, &points); //error shows in this line
for(const auto &p : points)
{
  std::cout << p << std::endl;
}
...
...
...
return 0;
}

此方法在普通类实现中完全可以正常工作,但是一旦我尝试将其与模板一起使用,它就会显示以下错误:

error: cannot call member function 
'bool calculate<T>::load_points(const string&, std::vector<Point<T>> *) 
[with T = double; std::__cxx11::basic_string <char>]' 
without object

为什么它适用于类而不是类模板?

你不能像这样调用load_points,因为它没有声明static,因此你需要一个类的实例。

例如,你可以说

calculate<double> calc;
calc.load_points(filepath, &points);