如何根据另一个模板类型推断模板类型

How to deduce template type based on another template type

我有一个模板化的 class,其类型由另一个子模板化构造函数确定。

template <typename V, typename I>
class Text{
  public:

    template <typename Container, typename V = typename Container::value_type, typename I = typename Container::size_type>
    Text(Container& c) {}

};

所以用法是这样的:

std::vector<int> v;
Text(v) //Deduces to Text<int, std::size_t>

不幸的是,我收到 V 和 I 被隐藏的错误。这是因为它正在尝试创建一个新的 V 和 I。

我见过 using V = typename Container::value_type; 的解决方案,但它给出了同样的错误。

您可能想编写自己的推导指南:

template <typename Container>
Text(Container&) -> Text<typename Container::value_type,
                         typename Container::size_type>;

Demo