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

用户6429576

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});
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在C#中将动态类型的对象转换为类型参数<T>?

C ++-17:将函数指针转换为具有不同参数指针类型的函数

动态确定C中函数参数的类型?

C ++将类型的参数包转换为索引的参数包

在C#中将通用类型参数转换为特定类型

将动态类型转换为字典C#

如何将 C 类型的可变参数类型转换为 C++ 样式的可变参数类型?

将C#类型参数转换为VB

将C泛型参数转换为函数指针

在C#中强制转换泛型函数类型参数

如何防止构造函数在C ++中强制转换参数类型?

Python SWIG:将C ++返回参数转换为返回值,并将原始C ++类型转换为Python类型

无法将类型“(Store).Type”的值转换为预期的参数类型“Binding<C>”

C ++从函数返回多个类型引用并将其转换为我们需要的类型

如何在c#中动态地将值转换为数据类型?

动态将派生类类型转换为基类C#

获取C ++函数参数的类型

C#动态转换超过了其他参数的类型不匹配错误

将 `c(x, y)` 作为函数参数转换为 R 中的 `c("x", "y")` (rlang/tidyevaluation)

将类型级别列表'[a,b,c,...]转换为函数a-> b-> c->

将C ++类型转换为C#

具有动态函数参数的C#编译器类型推断

C#使用类型参数将对象强制转换为类

为什么不能在C#中将null转换为类型T的参数?

如何在C#中将参数子字符串转换为列类型?

“无法将Python对象参数转换为类型'<typename>'”-使用Cython包装c ++类时出错

C ++模板对象数组:是否将UB转换为通用的非类型模板参数?

lua函数转换为C ++函数

将C函数转换为Python函数