c++ 虚函数 如何返回vector
就是类似这样的classIGraph{public:virtualvector<int>getAll()=0;};之后还会有子类继承该接口如果直接写会编译错误,说temp...
就是类似这样的
class IGraph
{
public:
virtual vector<int> getAll() = 0;
};
之后还会有子类继承该接口
如果直接写会编译错误,说template can not be 'virtual' 什么的
但是这在java里是可以的
有没有什么在c++里实现的办法? 展开
class IGraph
{
public:
virtual vector<int> getAll() = 0;
};
之后还会有子类继承该接口
如果直接写会编译错误,说template can not be 'virtual' 什么的
但是这在java里是可以的
有没有什么在c++里实现的办法? 展开
2个回答
2018-10-05
展开全部
c++的模板都是编译时处理的, 所以你传入不同的泛型参数会生成不同的方法。 编译器在处理virtual 成员函数时会尝试生成一个固定size的vtable, 但是前面说过模板函数生成的函数不是固定的。 例如你调用 a::<int>(); a::<char>(); 这样就会生成两个成员函数。目前c++实现不了这种功能.
另外模板其实限制很多的。 其中有一条就是模板定义最好放在头文件, 这样文本汇合到一起的时候, 编译器才会根据上下文生成不同泛型类型的定义。但假如泛型定义在cpp里面, 由于cpp可能没有泛型使用的上下文,所以即使定义了, 也会发生链接错误(cpp不知道到底要生成哪个泛型的定义)
另外模板其实限制很多的。 其中有一条就是模板定义最好放在头文件, 这样文本汇合到一起的时候, 编译器才会根据上下文生成不同泛型类型的定义。但假如泛型定义在cpp里面, 由于cpp可能没有泛型使用的上下文,所以即使定义了, 也会发生链接错误(cpp不知道到底要生成哪个泛型的定义)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询