| // { dg-do run } |
| |
| #include <assert.h> |
| #include <iostream> |
| #include <fstream> |
| |
| using std::ofstream; |
| using std::ifstream; |
| using std::ios; |
| |
| extern "C" int printf(const char *, ...); |
| |
| class Subscriptor |
| { |
| public: |
| |
| Subscriptor() : counter(1) {} |
| |
| virtual ~Subscriptor() |
| { |
| counter--; |
| assert(counter == 0); |
| } |
| |
| private: |
| mutable int counter; |
| }; |
| |
| template <int dim> struct Function |
| { |
| Function(int i): value(dim + i) {} |
| int value; |
| }; |
| |
| template <int dim> struct Triangulation |
| { |
| |
| }; |
| |
| template <int dim> struct Exercise_2_3 |
| { |
| enum { DIM = dim }; |
| }; |
| |
| template <int dim> |
| struct SetUpBase : public Subscriptor |
| { |
| virtual |
| const Function<dim> get_boundary_values () const = 0; |
| |
| virtual |
| const Function<dim> get_right_hand_side () const = 0; |
| |
| // virtual |
| // void create_coarse_grid (Triangulation<dim> &coarse_grid) const = 0; |
| }; |
| |
| template <class Traits, int dim> |
| struct SetUp : public SetUpBase<dim> |
| { |
| SetUp () {}; |
| |
| virtual |
| const Function<dim> get_boundary_values () const |
| { return Function<dim>(Traits::DIM); } |
| |
| virtual |
| const Function<dim> get_right_hand_side () const |
| { return Function<dim>(Traits::DIM); } |
| |
| // virtual |
| // void create_coarse_grid (Triangulation<dim> &coarse_grid) const; |
| |
| // static const typename Traits::BoundaryValues boundary_values; |
| // static const typename Traits::RightHandSide right_hand_side; |
| }; |
| |
| |
| void myread(std::istream * in) |
| { |
| char input_str[50] = "\0"; |
| if (in->good()) |
| (*in) >> input_str; |
| std::cout << input_str << std::endl; |
| delete in; |
| } |
| |
| |
| |
| int main() |
| { |
| /* |
| |
| SetUp<Exercise_2_3<1000>, 2> s1a; |
| SetUp<Exercise_2_3<2000>, 1> s2; |
| SetUp<Exercise_2_3<2000>, 2> s2a; |
| return s1->get_boundary_values().value + s1a.get_boundary_values().value + |
| s2.get_boundary_values().value + s2a.get_boundary_values().value + |
| s1->get_right_hand_side().value + s1a.get_right_hand_side().value + |
| s2.get_right_hand_side().value + s2a.get_right_hand_side().value; |
| */ |
| |
| SetUp<Exercise_2_3<1000>, 1> * s1 = new SetUp<Exercise_2_3<1000>, 1>(); |
| |
| printf("%d\n", s1->get_boundary_values().value); |
| |
| ifstream * infile = new ifstream("./template-list-iostream.cc"); |
| |
| myread(infile); |
| |
| ofstream * outfile = new ofstream("/tmp/xxx.txt"); |
| |
| if (outfile->good()) |
| (*outfile) << "hello there" << std::endl; |
| std::cerr << "Reached End" << std::endl; |
| |
| delete outfile; |
| |
| return 0; |
| } |