【问题标题】:static template functions in a class类中的静态模板函数
【发布时间】:2012-03-09 21:43:15
【问题描述】:

如何在类中创建以下函数,然后从 main 访问该函数? 我的类只是一堆静态函数的集合。

template<typename T> double foo(vector<T> arr);

【问题讨论】:

  • 这个是我试过的...除了放在普通类中
  • 既然你的类只是静态函数的集合,也许namespace会更好?

标签: c++ class templates static typename


【解决方案1】:

在 .h 文件中定义函数。

适合我

啊。

#include <vector>
#include <iostream>

using namespace std;
class A {
public:
template< typename T>
    static double foo( vector<T> arr );

};

template< typename T>
double A::foo( vector<T> arr ){ cout << arr[0]; }

main.cpp

#include "a.h"
int main(int argc, char *argv[])
{
    A a;
    vector<int> arr;
    arr.push_back(1);
    A::foo<int> ( arr );
}

 

【讨论】:

  • 它现在对我有用.. 有趣而奇怪... 我认为视觉工作室很糟糕!哈哈哈
  • 每次声明模板的时候,在头文件中定义就可以了))
  • 你不想在头文件中使用 using 语句:“using namespace std;”请改用“std::vector”。
  • 我收到一个错误:E0245 非静态成员引用必须与特定对象相关。
  • @James 你把方法声明为static 还是忘记了关键字
【解决方案2】:

你制作一个模板类:

template<typename T>
class First
{
public:
    static  double foo(vector<T> arr) {};
};

还请注意,您应该通过引用传递vector,或者在您的情况下,const 引用也会这样做。

template<typename T>
class First
{
public:
    static  double foo(const vector<T>& arr) {};
};

然后你可以像这样调用函数:

First<MyClass>::foo(vect);

【讨论】:

  • 如何从 main 调用该函数?像这样调用我的函数后出现一个奇怪的错误: ClassName::foo(arr)
  • 那里有一些不必要的分号。
猜你喜欢
  • 2012-05-22
  • 2012-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-30
相关资源
最近更新 更多