继承多参数包可变模板的类。

问题描述 投票:0回答:1

我有一个多参数包的可变模板类,类似于这样。

template <typename... Types>
struct TopicsList { };

template <typename... Topics>
class TheParent;

template <typename... OutputTopics, typename... InputTopics>
class TheParent<TopicsList<OutputTopics...>, TopicsList<InputTopics...>>
{
};

我想从这个类继承,就像这样。

template <typename... Topics>
class TheChild;

template <typename... OutputTopics, typename... InputTopics>
class TheChild<TopicsList<OutputTopics...>, TopicsList<InputTopics...>>
    : public TheParent<OutputTopics..., InputTopics...>, public ::testing::Test
{
};

但是我得到了以下的编译错误。

error: invalid use of incomplete type 'class {anonymous}::TheParent<TopicA, TopicB, TopicC>'
 class TheChild<TopicsList<OutputTopics...>, TopicsList<InputTopics...>>

如果有任何线索可以告诉我为什么会这样,我将非常感激!

c++ inheritance c++17 variadic-templates
1个回答
2
投票

那么

template <typename... OutputTopics, typename... InputTopics>
class TheChild<TopicsList<OutputTopics...>, TopicsList<InputTopics...>>
    : public TheParent<TopicsList<OutputTopics...>, TopicsList<InputTopics...>>, public ::testing::Test
// ....................^^^^^^^^^^^...............^^^^^^^^^^^^^^..............^
{
};

?

我是说... 如果你的 TheParent 宣称只收到几个 TopicsList,你必须保持 TopicsList 包装器将参数从 TheChildTheParent.

© www.soinside.com 2019 - 2024. All rights reserved.