1
Я написал свой собственный метод компоновки, который отлично подходит для POD, как оптимизировать его для обработки пользовательских типов, которые дорого копировать?Функциональный состав C++ - Оптимизация методов создания
#include <iostream>
template<typename T, typename U, typename V>
std::function<V(T&&)> compose(std::function<V(U)> f, std::function<U(T)> g)
{
std::function<V(T&&)> result = [&](T&& value){
return f(g(value));
};
return result;
}
int main(int argc, const char * argv[])
{
std::function<int(int)> f = [](int v){ return v + 1;};
std::function<int(int)> g = [](int v){ return v + 2;};
std::function<int(int)> h = compose(f, g);
std::cout << "compose(f,g): " << (h(5)) << std::endl;
return 0;
}
Blair
POD! = Дорого скопировать. Некоторые POD огромны, некоторые пользовательские типы могут быть скопированы очень дешево (например, только собственное целое число), а некоторые пользовательские типы дорого копируются, но дешево для перемещения. Поэтому, возможно, лучший вопрос: как выбрать (скорее всего) быстрее всего передать данный тип, и я думаю, что видел его раньше. – delnan
Возможный дубликат [Могу ли я позволить компилятору C++ решать, передавать ли значение по умолчанию или передавать по ссылке?] (Http://stackoverflow.com/questions/13408423/can-i-let-the-c- компилятор-решает-ли-к-передать по значению или миновать по ссылке) – delnan