我怎么能采取一些结构:
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/