我想创建一个基类,它将被其他对象继承,以便它们可以存储在同一个容器中。该基类将包含一个模板化方法,该方法将该函数定义为用于访问多线程系统中的缓冲区的setter或getter。我想要做这样的事,但不知道如何实施Linky。此外,我希望能够在基地的功能是虚拟的,并在派生类中定义功能,我知道你实际上不能有一个虚拟模板函数,但有没有一种方法来编码它的方式它的作用就像虚拟模板功能的概念。下面是我想如何布局的粗略示例。通过回调调用do_work方法。回调作为参数传递给线程。具有模板函数的继承类
class A {
template<typename R, typename P>
virtual R do_work(P param) = 0;
}
class B : public A {
template<void,int> // declare as setter
R do_work(P param){/*do something*/ return R;}
}
class C : public A {
template<int,void> // declare as getter
R do_work(P param){/*do something*/ return R;}
}
在链接文章中的问题,如果第一个模板参数是“void”,如何做一些不同的事情。我认为答案是使用'boost :: enable_if'来启用 - 禁用两种替代实现中的一种。 - 但不确定,你的问题如何与之相关联。 – UncleBens 2010-10-19 14:55:57
是否有可能编写一个测试R是否等于void的宏,如果没有,则使用此函数(如果不使用具有模板返回类型的函数)。 – Talguy 2010-10-19 15:06:39
另一个问题:你不期待'P'是无效的,给出像'R do_work(void param)'这样的签名? – UncleBens 2010-10-19 15:10:59