簡體   English   中英

通過非靜態成員函數轉換矢量

[英]Transform vectory by non-static member function

考慮以下模板功能:

template<class T, class F> inline
auto transform(const vector<T>& l, F func) -> vector<decltype(func(T{}))>
{
    vector<decltype(func(T{}))> out(l.size());
    std::transform(l.begin(), l.end(), out.begin(), func);
    return out;
}

此功能可以稱為

auto out = transform(intputVector, functor)

函數必須是靜態成員函數或全局函數。

有沒有一種方法可以修改上面的代碼,使其也可以用於非靜態成員函數?

struct Test {

    Test() {

        vector<int> vx = { 1, 2, 3 };
        auto vy1 = transform(vx, staticMemberFunc); // is fine
        auto vy2 = transform(vx, memberFunc); // does not compile

    }

    flt memberFunc(int x) {
        return 2 * x;
    }

    static flt staticMemberFunc(int x) {
        return 2 * x;
    }
};

您可以使用lambda綁定對象指針:

auto vy2 = transform(vx, [this](int x){return this->memberFunc(x);});

是,

  1. 使用std::bind()給你一個函子,你可以傳入
  2. 使用lambda函數執行與1相同的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM