gpt4 book ai didi

c++ - 动态转换为函数参数类型 (C++)

转载 作者:行者123 更新时间:2023-12-05 08:36:56 24 4
gpt4 key购买 nike

f1() 中,我希望能够将其 foo 参数动态转换为与 f2() 的参数相同的类型>(BarQux 等)。这可能吗?

struct Foo {
virtual ~Foo() = default;
};
struct Bar : public Foo {};
struct Qux : public Foo {};

template<class T>
void f1(T f2, Foo &foo) {
// dynamically cast foo to type of f2's argument?
f2(dynamic_cast<Bar &>(foo));
}

int main() {
Bar bar;
Qux qux;
f1([](Bar &bar) {}, bar);
f1([](Qux &qux) {}, qux); // error here!
}

最佳答案

这是模板转换operator的工作:

template <typename T>
struct dynamic_caster
{
T *ptr;
dynamic_caster(T &ref) : ptr(&ref) {}
template <typename U>
operator U &() const
{
return *dynamic_cast<std::remove_reference_t<U> *>(ptr);
}
};

template<class T>
void f1(T f2, Foo &foo)
{
f2(dynamic_caster{foo});
}

关于c++ - 动态转换为函数参数类型 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67169464/

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