可以使用T :: operator<作为模板功能的默认参数?

时间:2018-02-18 12:22:21

标签: c++ templates parameters c++17

我想知道是否可以使用operator<或其他一些函数作为默认参数。

一些愚蠢 琐碎示例:

template <typename T>
void compare(std::function<bool(T, T)> lessThan = T::operator<);

我尝试intT做这件事,但当然我收到了错误:

error: ‘operator<’ is not a member of ‘int’

我真的不知道是否有可能直到operator<,因为我知道它不是一个静态函数。

您是否有任何想法,是否以及如何做到这一点?

任何帮助都会被贬低! :)

2 个答案:

答案 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<>>()