C++ 模板中的类型名和变量

C++ 模板中的类型名和变量,c++,templates,C++,Templates,我想做一些类型的结构,并有能力使用另一个比较器的时候。这种做模板的方式是不工作的。我如何才能做到正确 template<typename T, typename Comparator = std::less<T>> struct list_heap{}; bool min(int &a, int &b){return a<b;}; int main(){list_heap<int>r;list_heap<int, min>rr

我想做一些类型的结构,并有能力使用另一个比较器的时候。这种做模板的方式是不工作的。我如何才能做到正确

template<typename T, typename Comparator = std::less<T>>
struct list_heap{};
bool min(int &a, int &b){return a<b;};
int main(){list_heap<int>r;list_heap<int, min>rr;return 0;};
模板
结构列表\堆{};

bool min(int&a,int&b){return a
min
是函数的名称,而不是类型。
min
的类型是
bool(*)(int&,int&)

您可以通过提供完整的类型名称来初始化结构:

list_heap<int, bool(*)(int&, int&)> rr;
//or something that bool(*)(int&, int&) will be convertible to:
list_heap<int, std::function<bool(int&, int&)>> rr;

如果无法编辑
main
,唯一的其他选项是将
min
更改为函数对象:

struct min
{
    bool operator()(int &a, int &b){return a<b;};
};
struct-min
{

bool operator()(int&a,int&b){返回a,它是如何工作的?如果你得到编译器错误,请复制并粘贴到问题中。编译器说min必须是typename。这是逻辑。但我需要更改模板,而不是main。@AndreyKomisarov唯一的其他方法是将
min
更改为函数对象,让我把它添加到答案中。
struct min
{
    bool operator()(int &a, int &b){return a<b;};
};