c++ - C++ 17 —将成员变量的类型映射到std::optionals

标签 c++ templates

我怎么能采取一些结构:

template<typename T>
typedef struct something_t {
  int x;
  int y;
  T z;
} something_t;
并创建一个实用程序类型(可能与一些宏组合),将其映射到相同形状的结构,但充满std::optionals。换句话说,我将如何在以下代码中编写partial结构,
template<typename T>
struct partial<T> { using type = ??? };

template<typename T>
using partial_something_t = partial<something_t<T>>::type;
...这将导致partial_something_t具有以下定义:
template<typename T>
typedef struct partial_something_t {
  std::optional<int> x;
  std::optional<int> y;
  std::optional<T> z;
} partial_something_t;

最佳答案

如果控制something_t的定义,则可以通过以下方式更改它:

template <template<typename> typename Wrapper, typename T>
struct new_something_t {
  Wrapper<int> x;
  Wrapper<int> y;
  Wrapper<T> z;
};
然后定义一个别名:
template <typename What> 
using Id = What;
现在,您原来的something_t<T>变成new_something_t<Id, T>,而partial_something_t<T>new_something_t<std::optional, T>

关于c++ - C++ 17 —将成员变量的类型映射到std::optionals,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65086114/

相关文章:

c++ - 嵌套类中的 "Invalid covariant return type"错误,其方法返回基于模板的对象

C++,()运算符重载,它的工作是什么

c++ - 模板参数是模板的模板类特化

c++ - 继承、隐藏函数和作用域 c++

c++ - 如何在函数中将二维数组作为参数传递并在 C++ 中返回二维数组?

c++ - GEM框架,还是来研究一下GCC吧

c++ - 将字符串推回对象 vector

c++ - 为什么我需要类型 T 的复制构造函数?

c++ - 如何修复此编译错误 : (compiler file 'f:\dd\vctools\compiler\cxxfe\sl\p1\c\template.cpp' , 行 22679)?

c++ - 对象的静态成员 vector 的const_cast