Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 模板元编程问题 模板 bool FComapare(节点*lId,节点*rId) { 如果(lId->getDiff(p)getDiff(p)) 返回true; 否则如果(lId->getDiff(p)==rId->getDiff(p)) { 如果(lId->getLT()getLT()) 返回true; 否则如果(lId->getLT()==rId->getLT()) 返回(lId->getTFG()getTFG()); } 返回false; } 向量m_F; 对于(int i=0;i 用1>[1> _Kty=Node*,1>\u Pr=bool(\uu cdecl*)(Node*,Node*)1>] 原因:无法从转换 “重载函数”到“bool” (uu cdecl*const)(节点*,节点*)'1> 没有使用此名称的函数 范围内匹配目标类型_C++_Templates_Metaprogramming - Fatal编程技术网

C++ 模板元编程问题 模板 bool FComapare(节点*lId,节点*rId) { 如果(lId->getDiff(p)getDiff(p)) 返回true; 否则如果(lId->getDiff(p)==rId->getDiff(p)) { 如果(lId->getLT()getLT()) 返回true; 否则如果(lId->getLT()==rId->getLT()) 返回(lId->getTFG()getTFG()); } 返回false; } 向量m_F; 对于(int i=0;i 用1>[1> _Kty=Node*,1>\u Pr=bool(\uu cdecl*)(Node*,Node*)1>] 原因:无法从转换 “重载函数”到“bool” (uu cdecl*const)(节点*,节点*)'1> 没有使用此名称的函数 范围内匹配目标类型

C++ 模板元编程问题 模板 bool FComapare(节点*lId,节点*rId) { 如果(lId->getDiff(p)getDiff(p)) 返回true; 否则如果(lId->getDiff(p)==rId->getDiff(p)) { 如果(lId->getLT()getLT()) 返回true; 否则如果(lId->getLT()==rId->getLT()) 返回(lId->getTFG()getTFG()); } 返回false; } 向量m_F; 对于(int i=0;i 用1>[1> _Kty=Node*,1>\u Pr=bool(\uu cdecl*)(Node*,Node*)1>] 原因:无法从转换 “重载函数”到“bool” (uu cdecl*const)(节点*,节点*)'1> 没有使用此名称的函数 范围内匹配目标类型,c++,templates,metaprogramming,C++,Templates,Metaprogramming,我得到以下错误 错误C2664: 'std::set::set(bool *常量(&)(节点*,节点*)”:无法从“bool”转换参数1 (uu cdecl*)(节点*,节点*)到“bool” (uu cdecl*const&)(节点*,节点*)'1> 用1>[1> _Kty=Node*,1>\u Pr=bool(\uu cdecl*)(Node*,Node*)1>] 原因:无法从转换 “重载函数”到“bool” (uu cdecl*const)(节点*,节点*)'1> 没有使用此名称的函数 范

我得到以下错误

错误C2664:
'std::set::set(bool
*常量(&)(节点*,节点*)”:无法从“bool”转换参数1
(uu cdecl*)(节点*,节点*)到“bool”
(uu cdecl*const&)(节点*,节点*)'1>
用1>[1>
_Kty=Node*,1>\u Pr=bool(\uu cdecl*)(Node*,Node*)1>] 原因:无法从转换 “重载函数”到“bool” (uu cdecl*const)(节点*,节点*)'1>
没有使用此名称的函数 范围内匹配目标类型


如何解决问题并获得相同的功能? 如何正确定义

template <int p>    
bool FComapare (Node *lId, Node* rId)    
{    
    if(lId->getDiff(p) < rId->getDiff(p))
        return true;
    else if(lId->getDiff(p) == rId->getDiff(p))
    {
        if(lId->getLT() < rId->getLT())
            return true;
        else if(lId->getLT() == rId->getLT())
            return (lId->getTFG() < rId->getTFG());
    } 
    return false;
}

vector<set<Node*, bool (*)(Node*,Node*) > > m_F;

for (int i = 0;i < partNum; ++i)
{
    //This doesn`t workbecause of  const problem...
    set<Node *, bool (*)(Node*,Node*) > f(&FComapare<i>);
    m_F.push_back(f);
}
向量m\F;

谢谢,编译时应该知道模板参数。 在您的例子中,您试图使用一个局部变量来实例化一个错误的模板函数


我认为最好的解决方案是不使用模板,只需使用操作符()创建一个与FComapare()相同的类,并将p存储为类成员

模板参数应在编译时已知。 在您的例子中,您试图使用一个局部变量来实例化一个错误的模板函数


我认为最好的解决方案是不使用模板,只需使用操作符()创建一个与FComapare()相同的类,并将p存储为类成员

编译时需要知道模板参数。不能将运行时值用作模板参数


因为在这种情况下,
p
不需要作为模板参数,所以这不是问题。您只需将
FCompare
的逻辑放入类的
操作符()
,该类的
p
作为成员变量,然后将该类的实例作为参数传递给
set
的构造函数。

模板参数需要在编译时已知。不能将运行时值用作模板参数


因为在这种情况下,
p
不需要作为模板参数,所以这不是问题。您只需将
FCompare
的逻辑放入类的
运算符()
,该类将
p
作为成员变量,然后将该类的实例作为参数传递给
set
的构造函数。

您不能将变量用于非类型参数

请尝试存储
i
值的函数对象,而不是模板函数

vector<set<Node*, bool (*)(Node*,Node*) > > m_F;
类FCompare
{
INTP;
公众:
FCompare(intp):p(p){}
布尔运算符()(常量节点*lId,常量节点*rId)常量{…}
};
集合f((FCompare(i));

不能将变量用于非类型参数

请尝试存储
i
值的函数对象,而不是模板函数

vector<set<Node*, bool (*)(Node*,Node*) > > m_F;
类FCompare
{
INTP;
公众:
FCompare(intp):p(p){}
布尔运算符()(常量节点*lId,常量节点*rId)常量{…}
};
集合f((FCompare(i));

“如何解决问题并获得相同的功能?”-什么功能?你忘了告诉我们你想要什么功能。您在这里试图实现的最终目标是什么?“我如何解决问题并获得相同的功能?”-什么功能?你忘了告诉我们你想要什么功能。你想在这里实现什么样的最终目标?设定它不会编译向量m\u F;那么我如何才能正确地定义set呢?set它不编译向量m\u F;那么我如何才能正确地定义集合?在这种情况下,我如何定义m_F?在这种情况下,我如何定义m_F?