template<typename T, typename TriFunc>
TriFunc process_three_continuous_channels_impl(cv::Mat &input, TriFunc func)
{
int const total = input.total();
auto *input_ptr = input.ptr<T>(0);
for(int index = 0; index != total; ++index){
func(*input_ptr, *(input_ptr + 1), *(input_ptr + 2));
input_ptr += 3;
}
return func;
}
/**
* overload, haven't find a good solution to reduce redundancy codes yet
*/
template<typename T, typename TriFunc>
TriFunc process_three_continuous_channels_impl(cv::Mat const &input, TriFunc func)
{
int const total = input.total();
auto const *input_ptr = input.ptr<T>(0);
for(int index = 0; index != total; ++index){
func(*input_ptr, *(input_ptr + 1), *(input_ptr + 2));
input_ptr += 3;
}
return func;
}
冗長コードを減らしたいのですが、良い解決策が見つかりません
template<typename T, typename TriFunc>
TriFunc process_three_continuous_channels_impl(cv::Mat const &input, TriFunc func)
{
return process_three_continuous_channels_impl<T>(const_cast<cv::Mat&>(input, func));
}
const_cast が非 const cv::Mat を const にキャストした後に func が入力のデータを変更できるため、これは機能しません。そのようにすれば、func はデータを変更できません。入力の。助言がありますか?