2

関数に対して3つのテンプレート引数があり、コンパイラがどのテンプレート引数がどれであるかを推測するのに問題があります(私は思います)。

テンプレート関数は次のとおりです。

#include <structures/partition.h>
#include <vector>

namespace cliques
{
    template <typename P, typename T, typename QF>
    P find_optimal_partition_louvain(cliques::Graph<T> &my_graph,
                                    QF quality_function)
    {

        P dummy;

    }

}

そして、私がそれを呼ぼうとすると

cliques::find_optimal_partition_louvain<cliques::DisjointSetForest>(my_new_graph, cliques::find_linearised_stability(current_markov_time));

テンプレート引数Pはcliques::DisjointSetForestに対応する必要があり、通常の関数引数はテンプレート化されたクラスと関数オブジェクトです。

これは失敗します

error: no matching function for call to
find_optimal_partition_louvain(cliques::Graph<lemon::ListGraph>&,
cliques::find_linearised_stability)

ただし、Pパラメーターにintやfloatなどの組み込み型を使用すると、すべてが正常にコンパイルされます。

例えば

cliques::find_optimal_partition_louvain<int>(my_new_graph, cliques::find_linearised_stability(current_markov_time));

だから私の質問は、私がここで何を間違っているのか、どのパラメーターがどれであるかをコンパイラーにもっとよく知らせるためにどのように使用できますか、または私は完全に軌道に乗っていないのですか?

4

3 に答える 3

1

私は自分の質問に答えるのは嫌いですが、問題はcliques::DisjointSubsetForestが実際にはテンプレート化されたクラスであるということでした。

cliques::find_optimal_partition_louvain<cliques::DisjointSetForest<int> >(my_new_graph, cliques::find_linearised_stability(current_markov_time));

作品

于 2011-01-24T19:23:16.390 に答える
0

簡単な例でエラーを再現しようとしましたが、(gcc で) 再現できませんでした。

find_optimal_partition_louvainコンパイラがそれが関数テンプレートであることを認識しているように見えます。次のことを試すことをお勧めします。

cliques::template find_optimal_partition_louvain<cliques::DisjointSetForest>(my_new_graph, cliques::find_linearised_stability(current_markov_time));

それ以外の場合は、次の簡単な例がコンパイラで正常にコンパイルされるかどうかを確認することをお勧めします (そうする必要があるためです!)。

#include <iostream>

template <class G>
struct Bar { };

namespace Foo {

template <class A, class B, class C>
A some_function(Bar<B>&, C aFunc) {
  aFunc();
  return A();
};

};

struct HWPrinter {
  HWPrinter() { std::cout << "Hello World!" << std::endl; };
};

struct IntPrinter {
  int value;
  IntPrinter(int aValue) : value(aValue) { };
  void operator() () { std::cout << "The integer is: " << value << std::endl; };
};

int main() {
  Bar<HWPrinter> ab;

  Foo::some_function<HWPrinter>(ab,IntPrinter(42));

  return 0;
};
于 2011-01-24T18:56:09.700 に答える
0

「エラー: 'find_optimal_partition_louvain(cliques::Graph&, cliques::find_linearised_stability) の呼び出しに一致する関数がありません」

あなたのコンパイラは cliques::Graph がテンプレートではないと考えているようです。

于 2011-01-24T18:41:27.550 に答える