c++ - 指针和函数的部分特化

标签 c++ templates generics specialization

这些是 less 方法的模板片段,它接受两个通用参数作为输入并返回 bool 结果

  • 第一个模板是通用的
  • 其次是const char*的显式特化类型

  • 指针的第三部分特化

如何实现函数的偏特化?

template<typename T> //general form
class C{
    public: bool isLess(const T& v1, const T& v2){
        return v1<v2;
    }
};

template<> //explicit specialization for char*
class C<const char*>{
public: bool isLess(const char* v1, const char* v2){
    return strcmp(v1,v2) < 0;}
};

template <typename T> //partial specialization for pointers
class C<T*> {
public: bool isLess(T* v1, T* v2){return *v1 < *v2;}
};
//partial specialization for functions?

最佳答案

我认为您或多或少想要如下内容:

template <typename R, typename... Args>
class C<R(*)(Args...)> {
    using func_ptr = R(*)(Args...);
    public: bool isLess(func_ptr l, func_ptr r) { return std::less<>{}(l, r); }
};

关于c++ - 指针和函数的部分特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40009694/

相关文章:

c++ - 从模板参数派生类

c++ - 将模板类作为参数传递

c++ - C++17模板参数中auto的优点

haskell - 在 Haskell 中创建通用类型类

c++ - 检查并行化 BLAS 例程的结果

c++ - if (!(cin >> variableName)) 在此循环中的相关性是什么

c++ - Opencv - 从特征匹配中获取像素坐标

c++ - 使用宏获取函数参数 'name'

Angular、可观察量泛型

c# - 为通用参数指定构造函数约束