user40409: I want to store a number of strings in an object. Currently I have:
class MyClass {
  int numStrings = 0;
  ??? strings[20];

  public:
    void addString(const char str[]);
    void print();
};

void MyClass::addString(const char str[]) {
  strings[numStrings] = str;
  numStrings++;
}

void MyClass::print() {
  for (int i = 0 ; i < numStrings ; i++) {
    Serial.println(strings[i]);
  }
}

Serial.println() works with strings in RAM and in PROGMEM alike.
Is there a type that I can give to my strings variable that allows me to store both types of strings?
MyClass s;

s.addString("This should work");
s.addString(F("This should work, too"));


user13432: 
Is there a type that I can give to my strings variable that allows me to store both types of strings?

No, but you could tag the pointer or add a vector with type information or ultimately use a class hierarchy (BaseString<-SRAMString, PROMEMString).  
As a pointer is 16-bit (Arduino Uno) and there is limited amount of SRAM it is possible to add a magic number to pointers to determine the address space.  
Obviously the print() member function will have to use the right type and you will also need a new addString for F() strings. Check how F() is defined. 
Cheers!

40409: <p>I want to store a number of strings in an object. Currently I have:</p>

<pre><code>class MyClass {
  int numStrings = 0;
  ??? strings[20];

  public:
    void addString(const char str[]);
    void print();
};

void MyClass::addString(const char str[]) {
  strings[numStrings] = str;
  numStrings++;
}

void MyClass::print() {
  for (int i = 0 ; i &lt; numStrings ; i++) {
    Serial.println(strings[i]);
  }
}
</code></pre>

<p><code>Serial.println()</code> works with strings in RAM and in PROGMEM alike.</p>

<p>Is there a type that I can give to my <code>strings</code> variable that allows me to store both types of strings?</p>

<pre><code>MyClass s;

s.addString("This should work");
s.addString(F("This should work, too"));
</code></pre>
 13432: <blockquote>
  <p>Is there a type that I can give to my strings variable that allows me to store both types of strings?</p>
</blockquote>

<p>No, but you could tag the pointer or add a vector with type information or ultimately use a class hierarchy (BaseString&lt;-SRAMString, PROMEMString).  </p>

<p>As a pointer is 16-bit (Arduino Uno) and there is limited amount of SRAM it is possible to add a magic number to pointers to determine the address space.  </p>

<p>Obviously the print() member function will have to use the right type and you will also need a new addString for F() strings. Check how F() is defined. </p>

<p>Cheers!</p>
