我有一个抽象类,应该是一个接口(interface),如下所示:
class IDataSource
{
public:
virtual double getMeThatDouble() = 0;
}
和一些实现
class IDataSourceStreamer
{
public:
double getMeThatDouble()
{
//implementation
}
}
关键是我想将其用作其他类的构造函数中的初始参数
class DataNeeder
{
public:
explicit DataNeeder(IDataSource);
}
麻烦就来了-
"parameter of abstract class type is not allowed"
。我了解这是出于特定原因而被禁止的-单独使用抽象类是不可能的。所以我该怎么做?是像
IDataSource.FeedThat(DataNeeder)
唯一的选择?有点丑。
最佳答案
您需要将抽象类型作为引用或指针传递。例如:
class DataNeeder {
public:
explicit DataNeeder(IDataSource &source) : source_(source) {
}
void someMethod() {
double x = source_.getMeThatDouble();
// ...
}
private:
IDataSource &source_;
}
然后,您可以让
DataNeeder
的成员函数在source_
上进行操作。如前所述,您也可以为该任务使用一个指针,但是我只想为“OUT”参数使用指针,可以想到的是NULL
。