是否可以使用模板类的单个参数将类型和该类型的指针传递给c ++模板类?

时间:2019-09-11 14:42:35

标签: c++ c++11 templates template-meta-programming

是否可以使用模板类的单个参数将类型和该类型的指针传递给c ++模板类?


我想使用一个指向类型为UART_HandleTypeDef的嵌入式硬件地址(一个uart)的指针,并推断出该类型信息,而不是手动声明它。类似于:

template<typename T> class serial{
public:
    T::value_type* uart = T;
};

我想摆脱通常的表示法,即要求我声明类型然后传递指针:

template<typename T,T* ptr> class c{
public:
  T* _ptr = ptr;
};

更新: 我忘了提:我的编译器支持C ++ 11之前的版本。它支持some C++11 features

1 个答案:

答案 0 :(得分:4)

自C ++ 17起,您可能拥有

template <auto* ptr> class c
{
public:
    auto _ptr = ptr;
};

在此之前,

template <typename T, T* ptr> class c
{
public:
    T* _ptr = ptr;
};

是必经之路。

自C ++ 11起,MACRO就可以提供帮助

#define TEMPLATE_AUTO(...) decltype(__VA_ARGS__), __VA_ARGS__

c<TEMPLATE_AUTO(my_ptr)> v;