我有这个模板
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” ”是更合适的选择,或者完全删除包装层,而直接使用元组。)