たとえば、私はどのタイプになるのかわからないので、タイプauto
の変数を持っていました。"auto"メンバー変数を使用することはできますか?
私はそれが私にこのエラーを与えているクラス/構造体宣言で宣言しよう:
Cannot deduce auto type. Initializer required
は、それを回避する方法はありますか?
struct Timer {
auto start;
};
たとえば、私はどのタイプになるのかわからないので、タイプauto
の変数を持っていました。"auto"メンバー変数を使用することはできますか?
私はそれが私にこのエラーを与えているクラス/構造体宣言で宣言しよう:
Cannot deduce auto type. Initializer required
は、それを回避する方法はありますか?
struct Timer {
auto start;
};
次のことができますが、あなたはそれをstatic
とconst
を宣言する必要があります。
struct Timer {
static const auto start = 0;
};
この制限により、非スタティックメンバーとしてstart
を持つことはできません。異なるオブジェクトに異なる値を設定することはできません。
あなたが別のオブジェクトに対してstart
の異なる種類をしたい場合は、より良いあなたがT
の種類を推定したい場合は、あなたが行う工場出荷時のような関数を作ることができ
template<typename T>
struct Timer {
T start;
};
テンプレートとしてあなたのクラスを持っていますタイプ控除。
template<typename T>
Timer<typename std::decay<T>::type> MakeTimer(T&& startVal) { // Forwards the parameter
return Timer<typename std::decay<T>::type>{std::forward<T>(startVal)};
}
これはC++ draft standard
セクションでは、メンバ変数のためauto
を使用することについて7.1.6.4 auto specifier
段落4
言いたいことです:それは、これを初期化する必要がありますので
The auto type-specifier can also be used in declaring a variable in the condition of a selection statement (6.4) or an iteration statement (6.5), in the type-specifier-seq in the new-type-id or type-id of a new-expression (5.3.4), in a for-range-declaration, and in declaring a static data member with a brace-or-equal-initializer that appears within the member-specification of a class definition (9.4.2).
も、それはconst
でなければならないことを意味しています。だから、次のようなものは動作します:
struct Timer
{
const static int start = 1;
};
を私はマークが示唆するように、テンプレートを使用して、しかしそれはあなたがあまりにも多くなるとは思わないか、今、私はそれについていくつかのより多くを考えることを多分あなたはちょうどその場合のVariant Type
を必要としますBoost.Variant
またはBoost.Any
をチェックしてください。
いいえ。それぞれのコンストラクタにstart
の独自の初期化子を付けることができるため、一貫した型を使用することはできません。
あなたがを行う場合は、あなたがそれを使用することができ、使用可能な発現を有する:
struct Timer {
Foo getAFoo();
delctype(Timer().getAFoo().Bar()) start;
Timer() : start(getAFoo().Bar()) { /***/ }
};
フィギュアうち、その種類 –
は、そのテンプレートがのためにあるものではないですか? – user1520427
どのようなタイプになりますか?コンパイル時間または実行時間?あなたは私たちにいくつかの文脈を与えることができますあなたは何をしようとしているのですか? – Homer6