2013-06-19 28 views
1

我已經寫了我自己的撰寫方法,它可以爲PODs工作正常,如何優化這個處理用戶定義的類型,這是昂貴的複製?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; 
} 

布萊爾

+0

POD!=昂貴的複製。一些POD是巨大的,一些用戶定義的類型可以非常便宜地複製(例如,只有一個整數),並且一些用戶定義的類型拷貝很貴,但移動起來很便宜。所以或許一個更好的問題是:我如何選擇(可能)最快速度傳遞給定的類型,我想我以前見過。 – delnan

+0

可能的重複的[我可以讓C++編譯器決定是傳遞值還是傳遞引用?](http://stackoverflow.com/questions/13408423/can-i-let-the-c-編譯器決定-是否對通過按值-或通按引用) – delnan

回答

0

答案是boost::call_traits<T> ...