lmi-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[lmi-commits] [lmi] master e695a13 4/6: Permit derivation from class pro


From: Greg Chicares
Subject: [lmi-commits] [lmi] master e695a13 4/6: Permit derivation from class product_data
Date: Fri, 21 Jun 2019 18:18:31 -0400 (EDT)

branch: master
commit e695a131f1203059c828b0bf646629e938815206
Author: Gregory W. Chicares <address@hidden>
Commit: Gregory W. Chicares <address@hidden>

    Permit derivation from class product_data
    
    Made default ctor protected rather than private, and added a protected
    accessor, so that derived classes can represent particular products.
---
 product_data.cpp | 12 ++++++++----
 product_data.hpp |  7 +++++--
 2 files changed, 13 insertions(+), 6 deletions(-)

diff --git a/product_data.cpp b/product_data.cpp
index cb6c1af..c0087dd 100644
--- a/product_data.cpp
+++ b/product_data.cpp
@@ -117,10 +117,7 @@ std::string const& glossed_string::gloss() const
     return gloss_;
 }
 
-/// Private default ctor.
-///
-/// Used only by friends: class PolicyDocument, 'my_prod.cpp',
-/// and 'basicvalues.cpp'.
+/// Default ctor, used only by derived classes and friends.
 
 product_data::product_data()
 {
@@ -173,6 +170,13 @@ std::string const& product_data::datum(std::string const& 
name) const
     return member_cast<glossed_string>(operator[](name))->datum();
 }
 
+/// Reference to named member.
+
+glossed_string& product_data::item(std::string const& name)
+{
+    return *exact_cast<glossed_string>(operator[](name));
+}
+
 /// Enregister certain data members for access via any_member<>[].
 
 void product_data::ascribe_members()
diff --git a/product_data.hpp b/product_data.hpp
index 2075fff..9eaff28 100644
--- a/product_data.hpp
+++ b/product_data.hpp
@@ -76,7 +76,7 @@ template<> struct deserialized<product_data>
 ///
 /// Implicitly-declared special member functions do the right thing.
 
-class LMI_SO product_data final
+class LMI_SO product_data
     :public xml_serializable  <product_data>
     ,public MemberSymbolTable <product_data>
 {
@@ -96,8 +96,11 @@ class LMI_SO product_data final
     static void write_policy_files();
     static void write_proprietary_policy_files();
 
-  private:
+  protected:
     product_data();
+    glossed_string& item(std::string const& name);
+
+  private:
     product_data(product_data const&);
     product_data& operator=(product_data const&) = delete;
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]