私のコードは以下の通りです: 私は関数ポインタを使ってテンプレートクラスオブジェクトを作成します。 なぜこれを行うのですか?ComparatorクラスLessはメンバ関数を使用して結果を表示します。ただし、operator()でクラスを定義すると、内部クラスが外部クラスの非静的メンバーにアクセスできないというエラーが発生します。だから私はテンプレートの引数を作るために関数を使うだろう。関数ポインタを使ったC++テンプレート引数
#include <iostream>
using namespace std;
template <typename Comp>
class Compare{
private:
int a[10]{1,2,3,4,5,6,7,8,9,0};
public:
// class Less{ //use inner class, can't visit the member function in OuterClass like java. so we'd use a function pointer to initialize the template
// public:
//
// };
bool Less(int v1, int v2){
return a[v1] < a[v2];
}
private:
Comp comp;
public:
void compare(int v1, int v2){
cout << comp(v1, v2);
}
};
int main()
{
Compare<&Compare::Less> c;
c.compare(1, 2);
}
しかし、私はエラーが好きだ、次のとおりです。
In function 'int main()':
[Error] template argument 1 is invalid
[Error] invalid type in declaration before ';' token
[Error] request for member 'compare' in 'c', which is of non-class type 'int'
は本当に理由を知りたいです。 Thx!:)
からインスピレーションを描画することをお勧めアルゴリズム実装については
、私が言う:バックステップを取り、テキストブックにクラステンプレートと関数テンプレートの基礎を経ます。この特定の問題に対する答えを得ることは、長期的にはあなたを助けません。最初に基礎を構築する必要があります。 –