please add a clear documentation in the doxygen "@param" here. Its really important to tell users what to do if there are that many options. Also, I think that the constructors should be splitted.

threshold is only needed if the method is actually threshold. So have one constructor where there is no mode parameter but only the threshold

// mode is threshold
CPCA(bool do_whitening=false, float64_t thresh=1e-6, EPCAMethod meth=SVD, EPCAMemoryMode mem=MEM_REALLOCATE);

//mode is fixed number
CPCA(bool do_whitening=false, EPCAMethod meth=SVD, EPCAMemoryMode mem=MEM_REALLOCATE);

Also I changed the order of method and memory mode since people want to change the first one more likely