gpt4 book ai didi

c++ - 如何获取模板类型的内部类型?

转载 作者:行者123 更新时间:2023-12-01 15:11:03 24 4
gpt4 key购买 nike

我有以下情况:

这是包装类型

template <typename wrapperInnerType>
struct wrapperT{ ... };
using wrapper = wrapperT<float>;

它在本课中使用
template <typename wrapperType>
class InData{
wrapperInnerType var; //<-- How to get inner type?
};

我的问题是从wrapperType获取wrapperInnerType的最简单方法是什么?

理想情况下,我希望在使用该类时仍然可以使用 InData<wrapper> myData;(而不是像 InData<wrapper, float> myData;这样的示例那样在声明中具有多种类型)。

最佳答案

最简单的方法是在wrapperT中定义类型别名。

template <typename wrapperInnerType>
struct wrapperT {
using innerType = T;
// ...
};
using wrapper = wrapperT<float>;

template <typename wrapperType>
class InData{
typename wrapperType::innerType var;
};

另一种方法可能是创建一个使用模板模板参数和部分特化功能将其提取的辅助结构。这样可以避免必须修改 wrapperT并可能提供一些可重用性。但是,必须知道 wrap的模板签名才能起作用。
template <typename T>
struct getInnerType;

template <template <typename> typename wrap, typename Inner>
struct getInnerType<wrap<Inner>> {
using type = Inner;
}

template <typename T> // For more convenient use as pointed out in comments
using getInnerType_t = typename getInnerType<T>::type

template <typename wrapperType>
class InData{
getInnerType_t<wrapperType> var; //<-- How to get inner type?
};

关于c++ - 如何获取模板类型的内部类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59928478/

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