私は回避策があれば疑問は、このような状況です。変数B
は、初期化されていないstd::function
インスタンスを呼び出すことによって初期化されるため、クラッシュします。私の論理では、回避策はまずstd::function
を初期化してから、メンバーB
を初期化することです。しかし、その後、このようなコードが有効ではありません。::機能
class A
{
//error: 'B' was not declared in this scope
std::function<decltype(B)(int)> initB = [this](int value)
{decltype(B) temp;
temp.setValue(value);
return temp;};
class
{
public:
void setValue(int val) {i=val;}
private:
int i;
} B = initB(10);
}
私はstd::function
static
を作るために作ってみました、そして、そのようなコードは動作しますが、STD ::機能がnon-trivial destructor
持っているので、non-constexpr/const
メンバーを必要とする - 悪いです、そのため、そのようなファイルを作成する必要があるソースファイルが必要です。これは、私の美しいヘッダー専用クラス階層のいくつかの退屈さと破壊を必要とします! (私は、怠け者で、ヘッダーにこの変数を定義することができますが、多重定義の問題が発生します)。私はそれが悪い設計かもしれないことを知っている(私は物事をテストしている)が、ソースファイルを関与せずにどのように問題を解決することができますか?
ネストしたクラスを前方宣言することができます。したがって、クラスに名前を付けることができ、データメンバで 'decltype'を使う代わりにクラスを参照することができます。または、ネストされたクラスとデータメンバーの定義を完全に分離します。私は、このマージがあなたを買うものについて確信しています。 –
@Johannes Schaub私はそれを見るので、私はなぜそれを匿名にしたかったのか分かりません。応答ありがとう:) – xinaiz