allows building with -std=c++11 under G++

This commit is contained in:
Eric Christiansen 2013-02-22 13:28:20 -08:00
parent 0b8a6da817
commit a66f7cb9bc
2 changed files with 21 additions and 1 deletions

View File

@ -67,7 +67,13 @@ namespace cv { namespace softcascade { namespace internal
struct Random
{
typedef std::mt19937 engine;
// True if we're using C++11.
#if __cplusplus >= 201103L
// C++11 removes uniform_int.
typedef std::uniform_int_distribution<int> uniform;
#else
typedef std::uniform_int<int> uniform;
#endif
};
}}}

View File

@ -233,8 +233,22 @@ void ChannelFeaturePool::fill(int desired)
int x = xRand(eng);
int y = yRand(eng);
#if __cplusplus >= 201103L
// The interface changed slightly going from uniform_int to
// uniform_int_distribution. See this page to understand
// the old behavior:
// http://www.boost.org/doc/libs/1_47_0/boost/random/uniform_int.hpp
int w = 1 + wRand(
eng,
// This extra "- 1" appears to be necessary, based on the Boost docs.
Random::uniform::param_type(0, (model.width - x - 1) - 1));
int h = 1 + hRand(
eng,
Random::uniform::param_type(0, (model.height - y - 1) - 1));
#else
int w = 1 + wRand(eng, model.width - x - 1);
int h = 1 + hRand(eng, model.height - y - 1);
#endif
CV_Assert(w > 0);
CV_Assert(h > 0);