我有一个函数的三个模板参数,并且(我认为)编译器推断哪个模板参数是哪个有问题。
模板函数为:
#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));
所以我的问题是我在这里做错了什么,我怎样才能更好地告知编译器哪个参数是哪个,或者我完全偏离了轨道?