Zwrócenie string lub wstring z funkcji w zależności od typu szablonowego T.

0
template <class T>
class Foo
{   
public:
   T ToString() { /*konkatenacja składowych klasy + przekonwertowany czas na łańcuch*/ }
private:
   std::string TpToString() { // użycie funkcji std::ctime()
      return timeStr; // tp przekonwertowany na std::string
   }
private:
   std::chrono::system_clock::time_point tp;
   T mem1;
   T mem2;
};

Wiadomo, że kod dla obu ścieżek wykonania musi być poprawny, więc nie można w takcie wykonywania
programu skorzystać z ifologii, switch itp, aby wykonać jedną gałąź poprawnego kodu dla danego typu T
(raz ma to być std::string, a raz std::wstring).
Chciałbym, aby string zwrócony z metody TpToString można było użyć w funkcji ToString i zwrócić jako typ T.
Czy jest jakiś sposób na rozwiązanie tego problemu?

0

Czym może być T?

0

raz ma to być std::string, a raz std::wstring

int main()
{
   Foo<std::string> f;
   std::cout << f.ToString();
   Foo<std::wstring> ff;
   std::wcout << ff.ToString();
}

Może to pomoże.

5
T ToString() {
  std::basic_stringstream<T::value_type, T::traits_type> ss;
  ss << TpToString() << mem1 << mem2;
  return ss.str();
}
4

template<typename T>
struct foo
{

    T toString() const {
        auto t = std::chrono::system_clock::to_time_t(tp);
        auto buf = std::ctime(&t);
        auto len = std::strlen(buf);
        return T(buf, buf+len);
    }

private:
    std::chrono::system_clock::time_point tp = std::chrono::system_clock::now();
};

https://wandbox.org/permlink/xkHhSorGznenBJ9E

1 użytkowników online, w tym zalogowanych: 0, gości: 1