c++ - 使用模板函数继承类

标签 c++ templates inheritance

我想创建一个基类,它将被其他对象继承,以便它们可以存储在同一个容器中。该基类将包含一个模板化方法,该方法将函数定义为用于访问多线程系统中的缓冲区的 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;}

}

最佳答案

您似乎对 A 是 A 类中 do_work 的模板参数有疑问:这实际上没有意义。

R 未在 B 或 C 中的任何地方定义,您的特化语法错误​​。

do_work 不会是多态的,因为它不是虚拟的,所以如果你有一组 A 指针,它只会调用 A 版本,而不会调用 B 或 C 版本,即使它们更匹配。

关于c++ - 使用模板函数继承类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3969196/

相关文章:

python - 如何从自定义模板标签中获取模板变量

amazon-web-services - Elasticsearch:以专业领域为基础改进研究。进入模板

java - OOP 继承扩展

相互依赖的类的 C++ 继承

c++ - 在 C++ 中确定数据表事件的类型

c++ - google mock - 即使函数有不同的参数,EXPECT_CALL 也会触发

c++ - VC++ 11 中的 std::thread 类导致随机崩溃。任何解决方法?

c++ - 在数字列表中搜索最小值和最大值

c++ - C 基础,const unsigned char* to integer or bool

c++ - 枚举作为非类型函数模板参数应该彼此不同吗?