1

このラッパーを介して基になる変数が変更されたときに変更を通知する変数ラッパーがあるため、他のオブジェクトが変更をリッスンできます。

それは問題なく動作します (つまり、基礎となるオブジェクトでメンバー関数を代入、追加、減算、呼び出しできます (ただし、これらには変更を通知する方法はありません) など)、わずかな問題が 1 つあります。

struct some_object_type
{
  wrapper<int> some_wrapper;
}

int main()
{
  some_object_type some_object;
  auto value = some_object.some_wrapper;
}

valuehere は として正しく推定されますwrapper<int>。このコンストラクトsome_object.some_wrapperを typeintのように動作させて、変数valueとして推定する方法はありますか?int

4

1 に答える 1

0

@TartanLlama のコメントには正しい解決策があります。ただし、代わりに指定した場合、何autoを推測しますauto const& value = ...か? その場合、暗黙的な変換は機能しません。

以前にこの問題に遭遇したことがありますが、思いつく最善の解決策はwrapper<T>::operator()関数を提供することでした:

struct some_object_type
{
  wrapper<int> some_wrapper;
}

int main()
{
  some_object_type some_object;
  auto value1 = some_object.some_wrapper;  // deduces to wrapper<int>
  auto value2 = some_object.some_wrapper(); //deduces to int      
}

あなたが望んでいた解決策ではないかもしれませんが、自動型推論をあきらめない限り、@TartanLlamaの提案が最善の手段です。

于 2016-11-16T03:51:49.767 に答える