gpt4 book ai didi

c++ - 你可以将任何指针类型或基类传递到函数 typedef 中吗

转载 作者:行者123 更新时间:2023-11-28 03:21:05 25 4
gpt4 key购买 nike

我有这个代码

class ClassX {};

class ClassY : public ClassX {};
typedef std::function<void (ClassX*)> myCaller;

class Foo {
Foo()
{
createCaller(this, &Foo::bar); //line 22 with the error
}

template <typename Class>
void createCaller(Class *obj, void (Class::*func)(ClassX*))
{
myCaller mc = std::bind(func, obj, std::placeholders::_1);;
}

void bar(ClassY* x)
{
printf("fooBrr");
}

};

它工作正常,直到 bar 采用扩展 ClassX 而不是 ClassX 的 ClassY。

我得到编译时错误:main.cpp:22:9: 没有匹配的成员函数来调用“createCaller”

问题是我将如何允许 bar 接受任何扩展 ClassX 的类或任何类的参数?有可能吗?

最佳答案

你不能这样做,因为 barmyCaller 更严格。然而,你可以走另一条路:

class ClassX {};

class ClassY : public ClassX {};
typedef std::function<void (ClassY*)> myCaller;

class Foo {
Foo()
{
createCaller(this, &Foo::bar); //line 22 with the error
}

template <typename Class>
void createCaller(Class *obj, void (Class::*func)(ClassX*))
{
myCaller mc = std::bind(func, obj, std::placeholders::_1);
}

void bar(ClassX* x)
{
printf("fooBrr");
}

};

现在 barmyCaller 限制更少,因此可以绑定(bind)。

您还可以让 bar 获取一个 ClassX* 并将其 dynamic_cast 为一个 ClassY* 并检查 NULL。

关于c++ - 你可以将任何指针类型或基类传递到函数 typedef 中吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15408877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com