我有这个模板

template <typename T>
class Publisher
{
public:
    Publisher(){}
    ~Publisher(){}
}

我有这个可变的模板
template <typename First, typename... Rest>
class PublisherContainer
{
    PublisherContainer();
    ~PublisherContainer();
}

PublisherContainer构造函数中,我想为每个模板参数创建一个Publisher:
template <typename First, typename... Rest>
PublisherContainer<First, Rest...>::PublisherContainer()
{
    Publisher<First> publisher;
    // create other publisher here.
}

所以我可以做
PublisherContainer<ClassA, ClassB, ClassC> myPublisher;

如何为每个模板参数调用Publisher

最佳答案

类模板不能具有“包成员”。参数包必须转发或解包;它们不能像类型一样使用。

最简单的答案是不重新发明轮子,而是使用由用户创建的产品类型std::tuple:

template <typename ...Args>
struct PublisherContainer
{
    std::tuple<Publisher<Args>...> publisher;
};

(请注意,“容器”可能是一个不好的名字,因为在标准C++的习惯用法中,容器是对元素的可迭代范围进行建模的对象。元组是乘积(“每个”中的一个),而不是范围。也许是“PublisherHolder” ”是更合适的选择,或者完全删除包装层,而直接使用元组。)

07-27 18:42