私はタプルを書くことを実験していますが、私が理解していないことは、スワップを書く方法です。 (簡体字)のタイプは次のようになります。私は// ???
でマークされた場所での指標と種類を展開しようとしてきたが、どのように私の人生のために把握することはできませんバリデーション基底クラスでスワップ
template<size_t I, typename T>
struct tuple_elem {
...
void swap(tuple_elem& other)
{
// implemented
}
};
template<size_t... Is, typename... Ts>
struct tuple_impl<std::index_sequence<Is...>, Ts...>
: private tuple_elem<Is, Ts>...
{
void swap(tuple_impl& other)
{
// ???
}
};
。私は次のようなものを試してみた:
static_cast<tuple_elem<Is, Ts>&>(*this)->swap(
static_cast<tuple_elem<Is, Ts>&>(other))...;
しかし、のようなエラーを与えた:
Tuple.hpp:182:64: error: expected ';' before '...' token
static_cast<tuple_elem<Is, Ts>&>(other))...;
^~~
Tuple.hpp:182:67: error: parameter packs not expanded with '...':
static_cast<tuple_elem<Is, Ts>&>(other))...;
^
ヘルプ!
swap(static_cast(* this)、static_cast (other))、...のようなものでしょうか?たぶん、ダミーの配列のインネイザを使用しています。 –
@KerrekSBああ、ダミーの配列はそのトリックです。しかし、それがよりエレガントにできるかどうか疑問に思っています。 –
C++ 17では、これは非常に素晴らしく読みやすいように折り畳み式をしています。 –