gpt4 book ai didi

c++ - 如何从 T、T& 或 T* 模板参数中获取 T*

转载 作者:太空狗 更新时间:2023-10-29 23:26:41 32 4
gpt4 key购买 nike

我正在尝试找到一种方法来获取模板参数的基类。

考虑以下类:

template <class C>
class Foo
{
public:
Foo(){};
~Foo(){};
C* ptr;
};

如果 C 是引用(例如 Test&),则 ptr 是类型 C&*

但是无论 C 是引用、指针还是其他任何东西,我都需要获取基类的指针。

  • 如果CTest&那么ptr需要是Test*,
  • 如果 CTest* 那么 ptr 需要是 Test*,
  • 如果 CTest,则 ptr 需要是 Test*,等等。

有没有办法获得 C 的“基”类,这样我就可以创建我需要的指针?

最佳答案

如果你真的需要底层元素类型,你可以使用移除类型操作特征的递归应用:

#include <type_traits>

// precv = pointer, reference, extents, const, and volatile
template <typename T>
struct remove_precv
{
typedef typename std::remove_pointer<
typename std::remove_reference<
typename std::remove_all_extents<
typename std::remove_cv<T>::type>::type>::type>::type type;
};

template <typename T, typename U>
struct element_type_impl
{
typedef typename element_type_impl<
typename remove_precv<T>::type, T>::type type;
};

template <typename T>
struct element_type_impl<T, T>
{
typedef T type;
};

template <typename T>
struct element_type
{
struct null_type { };
typedef typename element_type_impl<T, null_type>::type type;
};

例如,element_type<int***[42]>::typeint .

关于c++ - 如何从 T、T& 或 T* 模板参数中获取 T*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10323018/

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