【发布时间】:2018-11-23 20:34:52
【问题描述】:
我希望有一个默认函数作为“谓词”模板,以防用户不提供。到目前为止,我一直在做类似的事情:
template<typename T>
struct simple_compare{
bool operator()(T const& a, T const& b){
return a > b;
}
};
template<typename T, typename Predicate=simple_compare<T> >
bool compare(T a, T b, Predicate pred) {
return pred(a, b);
}
这可以在 C++ 中使用模板元编程来完成,而不是使用带有重载 () 运算符的结构吗?
【问题讨论】:
-
你也可以有一个模板特化,有/没有用户定义的谓词。我认为不需要“元编程”。
-
@Klaus,在这种情况下,我认为不对,你不能部分专门化模板函数,直到像 c++20 之类的东西。
-
我已经考虑过使用专门化,但我希望可以使用模板来完成编译时执行。但如果不能那样做,我还不如接受专业化的简单解决方案。
-
我仍然认为您的解决方案运行良好。如果你需要一个默认的自定义比较函数,你应该把它写在某个地方。元编程不会为你编写代码。
-
C++11、C++14 还是 C++17?
标签: c++ templates template-meta-programming