虚方法和模板类

时间:2010-03-27 21:45:20

标签: c++ templates virtual

我遇到了一个问题,我认为这是一个非常具体的问题。

我有两个课程,一个 B aseclass和一个 D 来自的课程(来自 B aseclass)。 B 是模板类(或类模板),并且具有纯虚方法 virtual void work(const T &dummy) = 0; D 成功的课程应该重新实现,但 D 来自 B 而不是 D 是另一个模板类,编译器向我吐出虚拟函数和模板不能一次工作。

如何实现我想要的任何想法?

我感谢任何想法和想法,特别是如果你已经解决了这个问题

此类已按原样修复,我不能在不破坏现有代码库的情况下编辑它

template <typename T>
class B {
public:
...
virtual void work(const T &dummy) = 0;
..
};

以int *为例

class D : public B<int*>{
...
virtual void work(const int* &dummy){ /* put work code here */ }
..
};

编辑:编译器告诉我, D

中的void B<T>::work(const T&) [with T = int*] 纯虚拟

4 个答案:

答案 0 :(得分:9)

您将const放在错误的位置。尝试

virtual void work(int* const &dummy){ /* put work code here */ }

const int*int const*相同,即它将const与int相关联,而不是指针。

答案 1 :(得分:1)

尝试:

int* const& dummy

答案 2 :(得分:0)

哪个编译器?

g ++ 4.4没有抱怨:

template <typename T>
class B {
public:
virtual void work(const T &dummy) = 0;
};
class D : public B<int*>{
virtual void work(const int* &dummy){ /* put work code here */ }
};

int main(){return 0;}

编辑:当然 - 错误只在实际实例化D时出现,通过移动const关键字修复:

template <typename T>
class B {
public:
virtual void work(const T &dummy) = 0;
};
class D : public B<int*>{
virtual void work(int* const &dummy){ /* put work code here */ }
};

int main(){D d;return 0;}

答案 3 :(得分:0)

你有const和参考问题的混合。以下编译:

template <typename T>
struct B {
virtual void work(T dummy) = 0;
};

struct D : public B<int*>{
virtual void work( int* dummy){ /* put work code here */ }
};

int main() {
    D d;
    d.work( 0 );
}