相关疑难解决方法(0)

键入擦除类型擦除,"任何"问题?

所以,假设我想使用类型擦除键入erase.

我可以为支持自然的变体创建伪方法:

pseudo_method print = [](auto&& self, auto&& os){ os << self; };

std::variant<A,B,C> var = // create a variant of type A B or C

(var->*print)(std::cout); // print it out without knowing what it is
Run Code Online (Sandbox Code Playgroud)

我的问题是,如何将其扩展为std::any

它不能在"原始"中完成.但是在我们分配给/构建一个std::any我们需要的类型信息时.

所以,从理论上讲,增强了any:

template<class...OperationsToTypeErase>
struct super_any {
  std::any data;
  // or some transformation of OperationsToTypeErase?
  std::tuple<OperationsToTypeErase...> operations;
  // ?? what for ctor/assign/etc?
};
Run Code Online (Sandbox Code Playgroud)

可以某种方式自动重新绑定一些代码,以便上述类型的语法可以工作.

理想情况下,它与使用变体的情况一样简洁.

template<class...Ops, class Op,
  // SFINAE filter that an op matches:
  std::enable_if_t< std::disjunction< std::is_same<Ops, …
Run Code Online (Sandbox Code Playgroud)

c++ type-erasure c++17 stdany

24
推荐指数
2
解决办法
2000
查看次数

标签 统计

c++ ×1

c++17 ×1

stdany ×1

type-erasure ×1