Второй аргумент шаблона для std::set
должен иметь тип , а не значение .
Если вы хотите использовать функцию (которая значение , а не тип ), тогда вы должны передать ее в качестве аргумента конструктору, что означает, что вы можете сделать это:
class Renderer
{
typedef bool (*ComparerType)(Mesh const&,Mesh const&);
std::set<Mesh, ComparerType> m_Meshes;
public:
Renderer() : m_Meshes(MeshCompare)
{ //^^^^^^^^^^^^^^^^^^^^^^^ note this
}
};
Или определите класс функтора и передайте его как второй тип аргумент std::set
.
struct MeshComparer
{
bool operator()(const Mesh& a, const Mesh& b) const
{
return ( (a.pTech < b.pTech) ||
( (b.pTech == a.pTech) && (a.pMaterial < b.pMaterial) ) ||
( (b.pTech == a.pTech) && (a.pMaterial == b.pMaterial) && (a.topology < b.topology) ) );
}
};
А затем используйте его:
std::set<Mesh, MeshComparer> m_Meshes;