gpt4 book ai didi

c++ - C++ 中方法参数类型的静态自省(introspection)

转载 作者:行者123 更新时间:2023-11-27 22:37:55 25 4
gpt4 key购买 nike

<分区>

我想制作一个模板类,它包含另一个类的实例并转发它的一个 foo具有正确参数类型的方法。是否有一种聪明的元编程方式可以对内部方法进行“完美转发”?

template <typename Inner>
class Outer {
private:
Inner inner;

public:

// To-do: replicate foo method of Inner with identical signature,
// how to pick correct T?
void foo(T arg) { inner.foo(arg); }

};

我可以看到两个经典的解决方案,但是是否有更好的现代元编程解决方案?

  • 具有部分保护接口(interface)的继承:Outer可以公开继承自 Inner .但是 Inner 也有只能由 Outer 而不是用户调用的方法。这些可以是 protected ,好的,但它也与 Outer 的实现紧密耦合和所有类型的 Inner类。 Outer的公共(public)接口(interface)可以通过Inner中的公共(public)方法任意扩展,这是不希望的。
  • 使 foo 成为模板函数 template <typename T> void foo(T&& arg) { inner.foo(std::forward<T>(arg)); } .这是参数的完美转发,但是如果用户调用 foo使用错误的参数,错误报告 Inner::foo而不是 Outer::foo .这打破了 Outer 的公共(public)接口(interface)提供的封装。 .

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