template<typename FunctionType>
void foo(FunctionType && function)
{
Bar b;
bar.mutateState();
function(bar);
}
Ben function
bar
mutasyona olmadığından emin olmak için, bu şablonu düşünün. Aşağıdakiler derlenmemelidir. Ancak, her iki satır da derlenmelidir.
foo([](const Bar &){});
foo([](Bar){});
Hangi teknikler kullanılabilir? Daha basittir, ancak std::function
üzerinden şablon tipi içgözlemeyi veya işaretçi imzasını tercih ederim.
bar
bir
const
sürümü ile
function
aramaya
foo
değiştirebilir
Bu işlev, gereksinim duyulduğu veya yanlışlıkla silinebileceği uygulamada gömmek yerine, işlev bildirgesine daha açık bir şekilde gereksinim duymak istiyorsanız iyi bir alternatiftir. – Mankarse