2013-06-19 4 views
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

+0

POD! = Дорого скопировать. Некоторые POD огромны, некоторые пользовательские типы могут быть скопированы очень дешево (например, только собственное целое число), а некоторые пользовательские типы дорого копируются, но дешево для перемещения. Поэтому, возможно, лучший вопрос: как выбрать (скорее всего) быстрее всего передать данный тип, и я думаю, что видел его раньше. – delnan

+0

Возможный дубликат [Могу ли я позволить компилятору C++ решать, передавать ли значение по умолчанию или передавать по ссылке?] (Http://stackoverflow.com/questions/13408423/can-i-let-the-c- компилятор-решает-ли-к-передать по значению или миновать по ссылке) – delnan

ответ

Смежные вопросы