gcc报invalid operands of types ‘<unresolved overloaded function type>‘ and ‘int‘ to binary ‘operator<_<unresolved overloaded function type>’ and ‘float’-CSDN博客
c++ - CPP templated member function specialization - Stack Overflow
1 背景
在用template
写一个DataFrame
的索引DEMO
时,编译器报:
invalid operands of types ‘<unresolved overloaded function type>‘ and ‘int‘ to binary ‘operator<
对应的代码结构类似:
template<typename T>
class Statement;
template<typename T>
class DataFrame{
public:
template<IndexType IT, typename...Args>
IndexValVecType getIdxs(const Arg&...args)const{
.....
}
};
template<typename T>
class Statement{
public:
template<IndexType IT, typename KeyType>
Statement& cond(const KeyType&key){
oper(m_df.getIdxs<IT>(key)); // 这里编译出错
return *this;
}
};
2 原因
主要原因是gcc
编译器不清楚getIdxs
是成员函数还是成员变量,在这里把它识别成了成员变量,将<
作为小于号使用。
3 解决方案
在调用时增加关键词template
,指明调用的是模板函数:
oper(m_df.template getIdxs<IT>(key));
即可编译通过。问题解决!