我想知道是否可以使用operator<
或其他一些函数作为默认参数。
一些愚蠢 琐碎示例:
template <typename T>
void compare(std::function<bool(T, T)> lessThan = T::operator<);
我尝试int
为T
做这件事,但当然我收到了错误:
error: ‘operator<’ is not a member of ‘int’
我真的不知道是否有可能直到operator<
,因为我知道它不是一个静态函数。
您是否有任何想法,是否以及如何做到这一点?
任何帮助都会被贬低! :)
答案 0 :(得分:3)
在模板函数中使用import db from __dirname + '/sequelize/models';
和模板参数几乎总是一个坏主意。
std::function
是类型擦除,模板参数是类型推导。类型擦除和类型推导是彼此的对立。做这两件事就像建房子只是为了炸毁它并建造另一座房子。
std::function
如果您想更换隔间,可以
template <class T, class C=std::less<T>>
void compare(C&& c = {});
答案 1 :(得分:1)
您始终可以模仿标准库的功能。
template<typename T,typename C=std::less<T>>
void compare()
{
C comparator{};
//Your logic here
}
这样,在将谓词传递给compare function
之前,您不必实例化谓词。
但是,您现在必须以下列方式调用compare
函数
compare<YourType>();
如果您需要更改compare
函数使用的谓词,请将其称为
compare<YourType,NewComparator<>>()