谁能告诉我以下代码为什么无法编译?我试图自己弄清楚这一点,但是我发现的每个答案似乎都与眼前的问题略有不同。这是尝试编译的结果:
jefferson@ubuntu:~$ g++ -std=c++14 templates.cpp
templates.cpp: In function ‘int main()’:
templates.cpp:26:19: error: template argument 1 is invalid
std::vector<Foo*> flubs;
^
templates.cpp:26:19: error: template argument 2 is invalid
这是有问题的代码:
1 #include <stdio.h>
2 #include <vector>
3 template <class T>
4 class Foo {
5 public:
6 virtual void f() const = 0;
7 };
8
9 class Bar : public Foo<Bar> {
10 public:
11 void f() const { printf("foobar\n"); };
12 };
13
14 class Baz : public Foo<Baz> {
15 public:
16 void f() const { printf("foobaz\n"); };
17 };
18
19 int
20 main()
21 {
22 Bar bar = Bar();
23 Baz baz = Baz();
24 bar.f();
25 baz.f();
26 std::vector<Foo*> flubs;
27 return 0;
28 }
最佳答案
Foo
是一个类模板,而不是一个类。
因此,您不能创建类型为Foo*
的指针。
解决此问题的方法是创建一个基类。
class FooBase
{
public:
virtual void f() const = 0;
};
template <class T>
class Foo : public FooBase
{
};
然后使用:
std::vector<FooBase*> flubs;
关于c++ - 指向模板抽象类的指针 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43332784/