I'd like to do declare a member object within the class declaration within my header file. I want to defer the calling of the member's constructor until the corresponding source file. This is ideally what I'd like, just for illustration:
// foo.h
class Bar;
class Foo : public Base {
  Foo(int a);
  Bar  b;  // I don't want to construct here!
  ...
// foo.cc
Foo::Foo(int a)
  : base(a)
  , b("first", "second")  // <-- construct here
{}
Changing the type of b to a pointer will ripple through too many things.
Changing it to a REFERENCE is probably tenable.
// foo.h
class Bar;
class Foo : public Base {
  Foo(int a);
  Bar&  b;  // now it's a non-constant reference, but unassigned, and ok because no constructor!
  ...
// foo.cc
Foo::Foo(int a)
  : base(a)
  , b{"first", "second"}  // <-- construct here
{}
However, this results in the error: non-const lvalue reference to type 'Bar' cannot bind to an initializer list temporary. That makes sense too.
I guess I'm asking how would you do this? Is something like std::reference_wrapper going to be useful?
C++11 is a restriction.
Aucun commentaire:
Enregistrer un commentaire