KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I have a fairly complex program that runs into strange behavior when build with OpenMP in MSVC 2010 Debug mode. I have tried my best to construct the following minimal working example (though it is not really minimal) which minic the structure of the real program. #include <vector> #include <cassert> // A class take points to the whole collection and a position Only allow access // to the elements at that posiiton. It provide read-only access to query some // information about the whole collection class Element { public : Element (int i, std::vector<double> *src) : i_(i), src_(src) {} int i () const {return i_;} int size () const {return src_->size();} double src () const {return (*src_)[i_];} double &src () {return (*src_)[i_];} private : const int i_; std::vector<double> *const src_; }; // A Base class for dispatch template <typename Derived> class Base { protected : void eval (int dim, Element elem, double *res) { // Dispatch the call from Evaluation<Derived> eval_dispatch(dim, elem, res, &Derived::eval); // Point (2) } private : // Resolve to Derived non-static member eval(...) template <typename D> void eval_dispatch(int dim, Element elem, double *res, void (D::*) (int, Element, double *)) { #ifndef NDEBUG // Assert that this is a Derived object assert((dynamic_cast<Derived *>(this))); #endif static_cast<Derived *>(this)->eval(dim, elem, res); } // Resolve to Derived static member eval(...) void eval_dispatch(int dim, Element elem, double *res, void (*) (int, Element, double *)) { Derived::eval(dim, elem, res); // Point (3) } // Resolve to Base member eval(...), Derived has no this member but derived // from Base void eval_dispatch(int dim, Element elem, double *res, void (Base::*) (int,
Tags (comma-separated)
Save Edits
Cancel