簡體   English   中英

std :: get以元組為成員的自己的類

[英]std::get for own class with tuple as member

我有這樣的課:

 template<typename ... TTypes>
 class Composite {
 public:
     std::tuple<TTypes...> &getRefValues() { return values; }   
 private:
     std::tuple<TTypes...> values;
 };

std::get為類Composite定義std::get嗎? 它基本上應該調用已定義的std::get作為私有元組值。

當返回類型已知時(例如對於int數組成員),我能夠實現自定義的get函數,但是當返回類型可以是任意類型時(取決於組件的類型),我不知道如何實現get元組值)?

您可以這樣做:

template <std::size_t I, typename... Ts>
auto get(Composite<Ts...>& composite)
-> decltype(std::get<I>(composite.getRefValues()))
{
    return std::get<I>(composite.getRefValues());
}

注意:在C ++ 14中,您可以省略-> decltype(..)部分。

為了完整起見,這是我的解決方案。 感謝大家:

template<typename ... TTypes>
class Composite {
public:
    Composite(TTypes... t) {
        std::tuple<TTypes...> tuple(t...);
        values = tuple;
    } 

    std::tuple<TTypes...> &getRefValues() { return values; }    
private:
    std::tuple<TTypes...> values;
};

namespace std {
template<size_t I, typename ... TTypes>
    auto get(Composite<TTypes ...> &t) -> typename std::tuple_element<I, std::tuple<TTypes...>>::type { 
        return std::get<I>(t.getRefValues());
    }
}

int main() {
    Composite<int, char, double> c(13, 'c', 13.5);
    std::cout << std::get<0>(c) << std::endl;
    std::cout << std::get<1>(c) << std::endl;
    std::cout << std::get<2>(c) << std::endl;

    return 0;
}

暫無
暫無

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

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