由于我经常需要这个,我想编写一个处理主要流活动的类。
我可以这样使用的东西:
OutputFile out("output.txt");
for (int i = 0; i < 10; ++i)
out << i << "\n";
Run Code Online (Sandbox Code Playgroud)
为此,我编写了以下类:
class OutputFile {
std::string filename;
std::ofstream out;
public:
explicit OutputFile(std::string filename) {
this->filename = filename;
out.open("output/" + filename);
}
~OutputFile() {
out.close();
}
std::ofstream& operator()() { return out; }
};
Run Code Online (Sandbox Code Playgroud)
这几乎是我想要的,但是我正在重载运算符(),因此在上面的示例中我必须使用
out() << i << "\n";
Run Code Online (Sandbox Code Playgroud)
我应该如何修改我的类以便我可以用作
out << i << "\n";
Run Code Online (Sandbox Code Playgroud) 假设我有一个抽象类
class AbstractClass {
public:
virtual int get() const = 0;
};
Run Code Online (Sandbox Code Playgroud)
和两个不同的派生类
class DerivedClassA : public AbstractClass {
public:
int get() const override { return 1; }
};
class DerivedClassB : public AbstractClass {
public:
int get() const override { return 2; }
};
Run Code Online (Sandbox Code Playgroud)
我想将std::vectorAbstract Classed 传递给给定的函数:
int f(const std::vector<std::shared_ptr<AbstractClass> >& classes) { ... }
Run Code Online (Sandbox Code Playgroud)
我正在做的是这样的:
int main () {
std::vector<std::shared_ptr<AbstractClass> > _classes;
std::shared_ptr<AbstractClass> _derivedA = std::make_shared<DerivedClassA>();
_classes.push_back(_derivedA);
std::shared_ptr<AbstractClass> _derivedB = std::make_shared<DerivedClassB>();
_classes.push_back(_derivedB);
std::cout << f(_classes) << …Run Code Online (Sandbox Code Playgroud)