2012-03-18 10 views
2

オブジェクトのインスタンスを必要とします。decltypeは、私は、標準C++ 11で少し実験して、この問題を思い付いた

C++ 11では、あなたが自動的に関数の戻り値の型を取得するためにautodecltypeを使用することができます、begin()end()機能下記例えば:

#include <vector> 

template <typename T> 
class Container { 
private: 
    std::vector<T> v; 
public: 
    auto begin() -> decltype(v.begin()) { return v.begin(); }; 
    auto end() -> decltype(v.end()) { return v.end(); }; 
}; 

ここに私の問題は、私は私のコーディングスタイルに反している民間vector<T> v前に公共の宣言を宣言しなければならないということです。の後に私のプライベートメンバーの皆様にを宣誓したいと思っています。 decltypeの式はベクトルメンバ関数begin()の呼び出しであり、オブジェクトのインスタンスを必要とするため、関数宣言の前にベクトルを宣言する必要があります。

方法はありますか?

+0

が、問題は 'auto'と' decltype'の使用に関するものです。 – Snps

答えて

6

decltypeはまったく使用しないでください。戻り値の型をstd::vector<T>::iteratorに設定するだけで済みます。

あなたはそうのようなちょうどタイプから値を取得するためにstd::declvalを使用することができますが、自動を使用する場合:私は、私はauto` `なしでそれを行う方法を知っていることを追加したいと思います

auto begin() -> decltype(std::declval<std::vector<T>>().begin()) { return v.begin(); }; 
+0

はい、私はautoとdecltypeの使い方を学んでいます。私が書いたコードには、実験する以外の目的はありません。 – Snps

+0

@ snipes83私はオートを使用して私の答えを更新しました –

+0

これは私が探していたものです。ありがとうございました! – Snps

関連する問題