如何使用另一个模板化 class 的实例来模板化 class?

How do I template a class using an instance of another templated class?

我有一个模板化的 gpio class:

template <gpio_types::port_t PORT, uint32_t PIN>
class gpio {};

我想创建一个 class 以 gpio 实例作为模板。问题出在下面这一行。

template <uart_types::flexcomm PERIPH, int RX_BUF_LEN, gpio<gpio_types::port_t PORT, uint32_t PIN> TX_PIN>
class uart_shared_n_block {};

最后我想这样用:

gpio<gpio_types::P1, 13> tx;
auto uart = uart_shared_n_block<uart_types::FC_4,2048,tx>();

如何正确地模板化 uart_shared_n_block class?

这个

gpio<gpio_types::P1, 13> tx;

声明 tx 是类型 <gpio<gpio_types::P1, 13>> 的对象。 gpio<gpio_types::P1, 13> 不是模板,而是具体类型。如果你想将该类型作为参数传递给 uart_shared_n_block 那么,那将是:

template <uart_types::flexcomm PERIPH, int RX_BUF_LEN, 
          typename T>
class uart_shared_n_block {};

然后你可以通过

实例化它
auto uart = uart_shared_n_block<uart_types::FC_4,2048,gpio<gpio_types::P1, 13>>();

auto uart = uart_shared_n_block<uart_types::FC_4,2048,decltype(tx)>();

如果你真的想传递一个实例,而不是类型,那么我误解了这个问题;)。