2016-09-12 13 views
2

変数の型のプロパティをテストしたいと思います。私はそれをすることができますが、コードはあまりにも冗長です。型の変数に型をつける

#include <vector> 

int main() { 
    std::vector<int> v, &rv=v; 

    // ‘rv’ is not a class, namespace, or enumeration 
    //rv::value_type i1; 

    // Ok 
    decltype(v)::value_type i2; 

    // decltype evaluates to ‘std::vector<int>&’, which is not a class or enumeration type 
    //decltype(rv)::value_type i3; 

    // Ok 
    std::remove_reference<decltype(rv)>::type::value_type i4; 
} 

Iはdecltypeで暮らすが、std::remove_referenceを追加する多すぎることができます。

私は、容器内の値の型と同じ型の変数を定義する例を考えます。補助テンプレートを定義せずに、コードを短くする良い方法はありますか?

+2

テストするプロパティは何ですか? (これは[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)のようなものです) – molbdnilo

+0

Dunno、 'remove_reference'行はそれを見ません私に悪い、特に。あなたはこれを何十回もやろうとしないと考えている。それは答えはおそらく "いいえ"と言われています。 –

+0

これを繰り返し使用している場合は、 'using'文を使って' value_type'などにエイリアスしてください – jaggedSpire

答えて

0

あなたは

std::decay_t<decltype(rv)>::value_type i4 = 42; 

または

のいずれかでそれを短縮することができます
std::decay_t<decltype(*std::begin(rv))> i4 = 42; 
0

宣言にを使用して、いくつかのを使用します。

using my_value_type = decltype(v)::value_type; 
using your_value_type = std::remove_reference<decltype(rv)>::type::value_type; 

あなたのコードになるだろう:

int main() { 
    std::vector<int> v, &rv=v; 

    using my_value_type = decltype(v)::value_type; 
    using your_value_type = std::remove_reference<decltype(rv)>::type::value_type; 

    my_value_type i2; 
    your_value_type i4; 
} 
関連する問題