c++ - 指向类模板成员的函数指针

标签 c++ function pointers

我有这门课:

template <class T>
class list
{
    ...
    bool moreThan(T x, T y);
    bool lessThan(T x, T y);
    ...
};

我需要一个函数指针来改变我的类的行为,并在使用 bool moreThan(T, T)bool lessThan(T, T) 之间切换。 所以我目前正在使用:

bool (list<int>::*foo)(int x, int y);
foo = &list<int>::lessThan;

并使用它:

(this->*foo)(x, y);

但我想要一个灵活的函数指针,这样我就可以将它用于我需要的任何 T,而不仅仅是 int。那么有没有办法创建一个指向类模板成员的函数指针呢?像这样的东西:

template <class T>
bool (list<T>::*foo)(T x, T y); //this doesn't work

最佳答案

不,没有。指向成员的指针必须指向某物。类模板中的成员函数不是单个函数,它是一个函数家族——每个函数都有不同的类型。甚至可能有一个 T为此 list<T>::lessThan不存在,或者是类型或变量!

如果我们为一个这样的指向成员的指针创建一个别名:

template <typename T>
using CompFun = bool (list<T>::*)(T, T);

那么很明显CompFun<int>CompFun<string>是不同的类型。您不能创建通用的 CompFun<T>多变的。

不过,根据您要尝试执行的操作,可能有实现该目标的好方法。

关于c++ - 指向类模板成员的函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29712393/

相关文章:

c++ - 结合使用CImage和CStatic来显示变化的图像时的生命周期和资源管理

c++ - 指向具有指向非类型模板参数的外部链接的对象的指针

mysql - 创建函数时遇到问题。有人可以帮助我吗?

c - 为什么我可以在函数内而不是在 main 中递增 char 数组位置

C++如何使用指向 vector 指针的指针

c++ - Typedef 指向 C++ 中同名指针的结构

c++ - LNK2019未解析的外部符号求助

c++ - 如何将对函数的引用传递给另一个函数

function - Postgresql:插入/更新后触发函数:堆栈深度限制错误

c++ - 指针指向 vector 中的 NULL