On 4/20/16 11:43 PM, Gerald Squelart wrote:
How about another generic helper, e.g.:
  template <typename T, typename ...Args>
  Maybe<T> MakeCheckedMaybe(Args&&... aArgs)
  {
    nsresult rv;
    Maybe<T> m = Some(T(std::forward<Args>(aArgs)..., &rv));
    if (NS_SUCCEEDED(rv)) {
      return m;
    }
    return Nothing();
  }

Existing classes with Init() member functions could be shoehorned, unchanged, into this pattern with a MakeUnique() variant that called and checked Init(). Something like:

MakeUniqueAndInit(Args&&... aArgs)
{
  UniquePtr<T> up(new T(Forward<Args>(aArgs)...));
  return NS_SUCCEEDED(up.Init()) ? up : UniquePtr<T>();
}


_______________________________________________
dev-platform mailing list
dev-platform@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-platform

Reply via email to