我有这个模板
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
?
答案 0 :(得分:1)
类模板不能包含“pack members”。必须转发或解压缩参数包;它们不能像类型那样使用。
最简单的答案是不重新发明轮子并使用purpuse构建的产品类型if(isset($_POST['sign-up'][0]) && !empty($_POST['sign-up'][0]))
{
$signUp = 'Yes';
}
else
{
$signUp = 'No';
}
:
std::tuple
(注意“容器”可能是一个坏名字,因为在标准C ++的习语中,容器是模拟可迭代元素范围的东西。元组是一个产品(“每个”中的一个),而不是范围。也许“PublisherHolder”更合适,或完全删除包装层并直接使用元组。)
答案 1 :(得分:0)
Kerrek SB的回答是半正确的。这是正确的,你不能以你目前正在尝试这样做的方式拥有打包成员,但你可以继承。
首先我们将定义一个基类:
template<typename T>
class PublisherBase{
public:
int some_member;
void some_method(){}
};
然后我们需要一个类来包含我们的基础:
template<typename T>
class Publisher{
public:
PublisherBase<T> self;
};
然后我们创建我们的持有人或容器&#39;
template<typename First, typename ... Rest>
class PublisherContainer: public Publisher<First>, Publisher<Rest>...{};
我们可以这样使用:
int main(int argc, char *argv[]){
PublisherContainer<int, float, double, short> container;
container.Publisher<float>::self.some_method();
container.Publisher<short>::self.some_member = 5;
}
语法有点奇怪,但它实现了你的要求。这种方法的唯一问题是每种类型只限于一个发布者;但这也许是可取的。